Setup

Load Packages

##Install Packages if Needed
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("cowplot")) install.packages("cowplot")
if (!require("Rmisc")) install.packages("Rmisc")
if (!require("lme4")) install.packages("lme4")
if (!require("lmerTest")) install.packages("lmerTest")
Loading required package: lmerTest

Attaching package: ‘lmerTest’

The following object is masked from ‘package:lme4’:

    lmer

The following object is masked from ‘package:stats’:

    step
if (!require("vegan")) install.packages("vegan")
if (!require("corrplot")) install.packages("corrplot")
if (!require("DHARMa")) install.packages("DHARMa")
if (!require("effectsize")) install.packages("effectsize")
if (!require("emmeans")) install.packages("emmeans")
if (!require("Hmisc")) install.packages("Hmisc")
if (!require("dplyr")) install.packages("dplyr")
if (!require("tidyr")) install.packages("tidyr")

##Load Packages
library(ggplot2) #Required for ggplots
library(cowplot) #Required for plotting panel figures
library(Rmisc) #Required for SummarySE function
library(lme4) #Required for mixed effects modeling
library(lmerTest) #Required for p values with lme4 model summaries
library(vegan) #Required for multivariate analysis PERM
library(corrplot) #Required for correlation plot
library(DHARMa) #Required to check residuals of mixed effects models
library(effectsize) #Required for eta_squared effect sizes
library(emmeans) #Required for pairwise comparisons 
library(Hmisc) #Required for correlations
library(dplyr) #Required for dataframe organization
library(tidyr) #Required for dataframe organization

Graphing Parameters

#Note: Run "Graphing Parameters" section from 01_ExperimentalSetup.Rmd file

Sample Data and Metadata

Load and Organize Data

##Load Data
#Note: Physiological metrics calculated in 02_PhysiologyMetrics.R file
Coral<-read.csv("Outputs/CoralData.csv", header=TRUE)

##Set factor variables
Coral$TimeP<-factor(Coral$TimeP, levels=c("TP1", "TP2", "TP3", "TP4"))
Coral$Site<-factor(Coral$Site, levels=c("KL", "SS"))
Coral$Genotype<-factor(Coral$Genotype, levels=c("AC8", "AC10", "AC12"))
Coral$Orig<-factor(Coral$Orig, levels=c("N", "T"))
Coral$Origin<-factor(Coral$Origin, levels=c("Native", "Transplant"))
Coral$Site.Orig<-factor(Coral$Site.Orig, levels=c("KL.N", "KL.T", "SS.N", "SS.T"))

Multivariate Analysis

adonis OmegaSq Function

#' Calculate (partial) Omega-squared (effect-size calculation) for PERMANOVA and add it to the input object
#'
#' @param adonisOutput An adonis object
#' @param partial Should partial omega-squared be calculated (sample size adjusted). Default TRUE
#' @return Original adonis object with the (partial) Omega-squared values added
#' @import vegan
#' @export
adonis_OmegaSq <- function(adonisOutput, partial = TRUE){
    if(!(is(adonisOutput, "adonis") || is(adonisOutput, "anova.cca")))
        stop("Input should be an adonis object")
    if (is(adonisOutput, "anova.cca")) {
        aov_tab <- adonisOutput
        aov_tab$MeanSqs <- aov_tab$SumOfSqs / aov_tab$Df
        aov_tab$MeanSqs[length(aov_tab$Df)] <- NA
    } else {
        aov_tab <- adonisOutput$aov.tab
    }
    heading <- attr(aov_tab, "heading")
    MS_res <- aov_tab[pmatch("Residual", rownames(aov_tab)), "MeanSqs"]
    SS_tot <- aov_tab[rownames(aov_tab) == "Total", "SumsOfSqs"]
    N <- aov_tab[rownames(aov_tab) == "Total", "Df"] + 1
    if(partial){
        omega <- apply(aov_tab, 1, function(x) (x["Df"]*(x["MeanSqs"]-MS_res))/(x["Df"]*x["MeanSqs"]+(N-x["Df"])*MS_res))
        aov_tab$parOmegaSq <- c(omega[1:(length(omega)-2)], NA, NA)
    } else {
        omega <- apply(aov_tab, 1, function(x) (x["SumsOfSqs"]-x["Df"]*MS_res)/(SS_tot+MS_res))
        aov_tab$OmegaSq <- c(omega[1:(length(omega)-2)], NA, NA)
    }
    if (is(adonisOutput, "adonis"))
        cn_order <- c("Df", "SumsOfSqs", "MeanSqs", "F.Model", "R2",
                      if (partial) "parOmegaSq" else "OmegaSq", "Pr(>F)")
    else
        cn_order <- c("Df", "SumOfSqs", "F", if (partial) "parOmegaSq" else "OmegaSq",
                      "Pr(>F)")
    aov_tab <- aov_tab[, cn_order]
    attr(aov_tab, "names") <- cn_order
    attr(aov_tab, "heading") <- heading
    if (is(adonisOutput, "adonis"))
        adonisOutput$aov.tab <- aov_tab
    else
        adonisOutput <- aov_tab
    return(adonisOutput)
}

Check Correlation

##Remove NA's
names(Coral)
 [1] "ID"              "RandN"           "TimeP"           "Site"            "Genotype"       
 [6] "Orig"            "Origin"          "Set"             "Site.Orig"       "SA_cm2"         
[11] "TP_ug.cm2_C"     "TP_ug.cm2_S"     "AFDW_mg.cm2_C"   "AFDW_mg.cm2_S"   "AFDW_mg.cm2_S.C"
[16] "Chl_ug.cm2"     
Coral.rm<-na.omit(Coral)

##Log +1 transform 
Coral.log<-Coral.rm
Coral.log[,-c(1:10)]<-log(Coral.rm[,-c(1:10)]+1)
  
Phys.cor<-rcorr(as.matrix(Coral.log[,-c(1:10)]), type="pearson")
Phys.cor
                TP_ug.cm2_C TP_ug.cm2_S AFDW_mg.cm2_C AFDW_mg.cm2_S AFDW_mg.cm2_S.C Chl_ug.cm2
TP_ug.cm2_C            1.00        0.56          0.55          0.48            0.03       0.37
TP_ug.cm2_S            0.56        1.00          0.37          0.41            0.08       0.16
AFDW_mg.cm2_C          0.55        0.37          1.00          0.37           -0.49       0.33
AFDW_mg.cm2_S          0.48        0.41          0.37          1.00            0.60       0.50
AFDW_mg.cm2_S.C        0.03        0.08         -0.49          0.60            1.00       0.20
Chl_ug.cm2             0.37        0.16          0.33          0.50            0.20       1.00

n= 190 


P
                TP_ug.cm2_C TP_ug.cm2_S AFDW_mg.cm2_C AFDW_mg.cm2_S AFDW_mg.cm2_S.C Chl_ug.cm2
TP_ug.cm2_C                 0.0000      0.0000        0.0000        0.6401          0.0000    
TP_ug.cm2_S     0.0000                  0.0000        0.0000        0.2762          0.0248    
AFDW_mg.cm2_C   0.0000      0.0000                    0.0000        0.0000          0.0000    
AFDW_mg.cm2_S   0.0000      0.0000      0.0000                      0.0000          0.0000    
AFDW_mg.cm2_S.C 0.6401      0.2762      0.0000        0.0000                        0.0049    
Chl_ug.cm2      0.0000      0.0248      0.0000        0.0000        0.0049                    
diag(Phys.cor$P)<-0

corrplot(Phys.cor$r, type="upper", order="hclust", 
         p.mat = Phys.cor$P, sig.level = 0.01, insig = "blank")

TP1

##Subset Timepoint 1 
Coral.log_TP1<-subset(Coral.log, TimeP=="TP1")

PERMANOVA

##PERMANOVA
Coral.TP1.perm<-adonis2(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean")~ Coral.log_TP1$Origin * Coral.log_TP1$Site, data=Coral.log_TP1, strata=Coral.log_TP1$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP1.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP1[, c(11:14, 16)], "euclidean") ~ Coral.log_TP1$Origin * Coral.log_TP1$Site, data = Coral.log_TP1, method = "euclidean", strata = Coral.log_TP1$Genotype)
                                        Df SumOfSqs      F parOmegaSq Pr(>F)   
Coral.log_TP1$Origin                     1   0.2789 2.7121   0.034440  0.010 **
Coral.log_TP1$Site                       1   0.3722 3.6196   0.051750  0.003 **
Coral.log_TP1$Origin:Coral.log_TP1$Site  1   0.3433 3.3384   0.046454  0.004 **
Residual                                44   4.5240                            
Total                                   47   5.5183                            
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP1.disp_orig<-anova(betadisper(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin))
TP1.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.01547 0.015468  1.0199 0.3178
Residuals 46 0.69768 0.015167               
##Check dispersion by Site
TP1.disp_site<-anova(betadisper(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean"), Coral.log_TP1$Site))
TP1.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value  Pr(>F)  
Groups     1 0.04842 0.048424  3.1669 0.08175 .
Residuals 46 0.70338 0.015291                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin:Site
TP1.disp_os<-anova(betadisper(vegdist(Coral.log_TP1[,c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin:Coral.log_TP1$Site))
TP1.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     3 0.02212 0.0073726  0.5649  0.641
Residuals 44 0.57425 0.0130512               
##Save results
PERM_T1.res<-data.frame(adonis_OmegaSq(Coral.TP1.perm)[1:3,])
PERM_T1.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T1.res$p_DISP<-c(TP1.disp_orig$`Pr(>F)`[1], TP1.disp_site$`Pr(>F)`[1], TP1.disp_os$`Pr(>F)`[1])

Physiology differs significantly by Origin and the effect of Origin differs between Sites.

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP1.perm_KL<-adonis2(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="KL")], data=Coral.log_TP1[which(Coral.log_TP1$Site=="KL"),], strata=Coral.log_TP1$Genotype[which(Coral.log_TP1$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP1.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP1[which(Coral.log_TP1$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "KL")], data = Coral.log_TP1[which(Coral.log_TP1$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP1$Genotype[which(Coral.log_TP1$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "KL")]  1  0.05913 0.6453  -0.015001  0.435
Residual                                                22  2.01586                         
Total                                                   23  2.07498                         
##Check dispersion by Origin
TP1.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="KL")]))
TP1.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.002019 0.0020194  0.1424 0.7095
Residuals 22 0.311986 0.0141812               
##SS
##PERMANOVA
Coral.TP1.perm_SS<-adonis2(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="SS")], data=Coral.log_TP1[which(Coral.log_TP1$Site=="SS"),], strata=Coral.log_TP1$Genotype[which(Coral.log_TP1$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP1.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP1[which(Coral.log_TP1$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "SS")], data = Coral.log_TP1[which(Coral.log_TP1$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP1$Genotype[which(Coral.log_TP1$Site == "SS")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)    
Coral.log_TP1$Origin[which(Coral.log_TP1$Site == "SS")]  1  0.56298 4.9381    0.14096  0.001 ***
Residual                                                22  2.50815                             
Total                                                   23  3.07113                             
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP1.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP1[which(Coral.log_TP1$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP1$Origin[which(Coral.log_TP1$Site=="SS")]))
TP1.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.000018 0.0000178  0.0015 0.9695
Residuals 22 0.262265 0.0119211               
##Save results
PERM_T1.site.res<-data.frame(adonis_OmegaSq(Coral.TP1.perm_KL)[1,])
PERM_T1.site.res<-rbind(PERM_T1.site.res, data.frame(adonis_OmegaSq(Coral.TP1.perm_SS)[1,]))
PERM_T1.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T1.site.res$p_DISP<-c(TP1.KL.disp_orig$`Pr(>F)`[1], TP1.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T1.res<-rbind(PERM_T1.res, PERM_T1.site.res)
PERM_T1.res$Timepoint<-rep("TP1", nrow(PERM_T1.res))

TP2

##Subset Timepoint 2 
Coral.log_TP2<-subset(Coral.log, TimeP=="TP2")

PERMANOVA

##PERMANOVA
Coral.TP2.perm<-adonis2(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean")~ Coral.log_TP2$Origin * Coral.log_TP2$Site, data=Coral.log_TP2, strata=Coral.log_TP2$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP2.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP2[, c(11:14, 16)], "euclidean") ~ Coral.log_TP2$Origin * Coral.log_TP2$Site, data = Coral.log_TP2, method = "euclidean", strata = Coral.log_TP2$Genotype)
                                        Df SumOfSqs      F parOmegaSq Pr(>F)    
Coral.log_TP2$Origin                     1   0.0347  0.420   -0.01223  0.660    
Coral.log_TP2$Site                       1   2.0831 25.239    0.33554  0.001 ***
Coral.log_TP2$Origin:Coral.log_TP2$Site  1   0.2762  3.346    0.04660  0.030 *  
Residual                                44   3.6315                             
Total                                   47   6.0255                             
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP2.disp_orig<-anova(betadisper(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin))
TP2.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.02892 0.028918  1.1826 0.2825
Residuals 46 1.12482 0.024453               
##Check dispersion by Site
TP2.disp_site<-anova(betadisper(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean"), Coral.log_TP2$Site))
TP2.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.00701 0.0070126  0.5917 0.4457
Residuals 46 0.54518 0.0118518               
##Check dispersion by Origin:Site
TP2.disp_os<-anova(betadisper(vegdist(Coral.log_TP2[,c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin:Coral.log_TP2$Site))
TP2.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     3 0.02003 0.0066763  0.6202 0.6057
Residuals 44 0.47364 0.0107645               
##Save results
PERM_T2.res<-data.frame(adonis_OmegaSq(Coral.TP2.perm)[1:3,])
PERM_T2.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T2.res$p_DISP<-c(TP2.disp_orig$`Pr(>F)`[1], TP2.disp_site$`Pr(>F)`[1], TP2.disp_os$`Pr(>F)`[1])

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP2.perm_KL<-adonis2(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="KL")], data=Coral.log_TP2[which(Coral.log_TP2$Site=="KL"),], strata=Coral.log_TP2$Genotype[which(Coral.log_TP2$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP2.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP2[which(Coral.log_TP2$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "KL")], data = Coral.log_TP2[which(Coral.log_TP2$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP2$Genotype[which(Coral.log_TP2$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)  
Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "KL")]  1  0.18146 2.5268   0.059813  0.037 *
Residual                                                22  1.57991                           
Total                                                   23  1.76137                           
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP2.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="KL")]))
TP2.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.000732 0.0007320  0.0896 0.7675
Residuals 22 0.179698 0.0081681               
##SS
##PERMANOVA
Coral.TP2.perm_SS<-adonis2(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="SS")], data=Coral.log_TP2[which(Coral.log_TP2$Site=="SS"),], strata=Coral.log_TP2$Genotype[which(Coral.log_TP2$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP2.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP2[which(Coral.log_TP2$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "SS")], data = Coral.log_TP2[which(Coral.log_TP2$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP2$Genotype[which(Coral.log_TP2$Site == "SS")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP2$Origin[which(Coral.log_TP2$Site == "SS")]  1  0.12937 1.3872   0.015878  0.144
Residual                                                22  2.05163                         
Total                                                   23  2.18100                         
##Check dispersion by Origin
TP2.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP2[which(Coral.log_TP2$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP2$Origin[which(Coral.log_TP2$Site=="SS")]))
TP2.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df   Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.006276 0.0062764  0.4698 0.5003
Residuals 22 0.293942 0.0133610               
##Save results
PERM_T2.site.res<-data.frame(adonis_OmegaSq(Coral.TP2.perm_KL)[1,])
PERM_T2.site.res<-rbind(PERM_T2.site.res, data.frame(adonis_OmegaSq(Coral.TP2.perm_SS)[1,]))
PERM_T2.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T2.site.res$p_DISP<-c(TP2.KL.disp_orig$`Pr(>F)`[1], TP2.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T2.res<-rbind(PERM_T2.res, PERM_T2.site.res)
PERM_T2.res$Timepoint<-rep("TP2", nrow(PERM_T2.res))

TP3

##Subset Timepoint 3 
Coral.log_TP3<-subset(Coral.log, TimeP=="TP3")

PERMANOVA

##PERMANOVA
Coral.TP3.perm<-adonis2(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean")~ Coral.log_TP3$Origin * Coral.log_TP3$Site, data=Coral.log_TP3, strata=Coral.log_TP3$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP3.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP3[, c(11:14, 16)], "euclidean") ~ Coral.log_TP3$Origin * Coral.log_TP3$Site, data = Coral.log_TP3, method = "euclidean", strata = Coral.log_TP3$Genotype)
                                        Df SumOfSqs       F parOmegaSq Pr(>F)    
Coral.log_TP3$Origin                     1   0.1051  0.7853  -0.004493  0.342    
Coral.log_TP3$Site                       1   1.4021 10.4738   0.164837  0.001 ***
Coral.log_TP3$Origin:Coral.log_TP3$Site  1   0.1024  0.7649  -0.004921  0.376    
Residual                                44   5.8901                              
Total                                   47   7.4997                              
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP3.disp_orig<-anova(betadisper(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin))
TP3.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.06528 0.065278  2.0695  0.157
Residuals 46 1.45099 0.031543               
##Check dispersion by Site
TP3.disp_site<-anova(betadisper(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean"), Coral.log_TP3$Site))
TP3.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.00202 0.002024  0.0609 0.8062
Residuals 46 1.52934 0.033246               
##Check dispersion by Origin:Site
TP3.disp_os<-anova(betadisper(vegdist(Coral.log_TP3[,c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin:Coral.log_TP3$Site))
TP3.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     3 0.09225 0.030751   0.975 0.4131
Residuals 44 1.38769 0.031538               
##Save results
PERM_T3.res<-data.frame(adonis_OmegaSq(Coral.TP3.perm)[1:3,])
PERM_T3.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T3.res$p_DISP<-c(TP3.disp_orig$`Pr(>F)`[1], TP3.disp_site$`Pr(>F)`[1], TP3.disp_os$`Pr(>F)`[1])

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP3.perm_KL<-adonis2(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="KL")], data=Coral.log_TP3[which(Coral.log_TP3$Site=="KL"),], strata=Coral.log_TP3$Genotype[which(Coral.log_TP3$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP3.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP3[which(Coral.log_TP3$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "KL")], data = Coral.log_TP3[which(Coral.log_TP3$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP3$Genotype[which(Coral.log_TP3$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "KL")]  1  0.17515 1.5145   0.020987  0.171
Residual                                                22  2.54431                         
Total                                                   23  2.71946                         
##Check dispersion by Origin
TP3.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="KL")]))
TP3.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq   Mean Sq F value Pr(>F)
Groups     1 0.00703 0.0070337  0.3193 0.5778
Residuals 22 0.48467 0.0220307               
##SS
##PERMANOVA
Coral.TP3.perm_SS<-adonis2(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="SS")], data=Coral.log_TP3[which(Coral.log_TP3$Site=="SS"),], strata=Coral.log_TP3$Genotype[which(Coral.log_TP3$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP3.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP3[which(Coral.log_TP3$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "SS")], data = Coral.log_TP3[which(Coral.log_TP3$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP3$Genotype[which(Coral.log_TP3$Site == "SS")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP3$Origin[which(Coral.log_TP3$Site == "SS")]  1   0.0324 0.2129   -0.03391  0.779
Residual                                                22   3.3458                         
Total                                                   23   3.3782                         
##Check dispersion by Origin
TP3.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP3[which(Coral.log_TP3$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP3$Origin[which(Coral.log_TP3$Site=="SS")]))
TP3.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.07949 0.079485  1.9365  0.178
Residuals 22 0.90301 0.041046               
##Save results
PERM_T3.site.res<-data.frame(adonis_OmegaSq(Coral.TP3.perm_KL)[1,])
PERM_T3.site.res<-rbind(PERM_T3.site.res, data.frame(adonis_OmegaSq(Coral.TP3.perm_SS)[1,]))
PERM_T3.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T3.site.res$p_DISP<-c(TP3.KL.disp_orig$`Pr(>F)`[1], TP3.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T3.res<-rbind(PERM_T3.res, PERM_T3.site.res)
PERM_T3.res$Timepoint<-rep("TP3", nrow(PERM_T3.res))

TP4

##Subset Timepoint 4 
Coral.log_TP4<-subset(Coral.log, TimeP=="TP4")

PERMANOVA

##PERMANOVA
Coral.TP4.perm<-adonis2(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean")~ Coral.log_TP4$Origin * Coral.log_TP4$Site, data=Coral.log_TP4, strata=Coral.log_TP4$Genotype, method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP4.perm)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP4[, c(11:14, 16)], "euclidean") ~ Coral.log_TP4$Origin * Coral.log_TP4$Site, data = Coral.log_TP4, method = "euclidean", strata = Coral.log_TP4$Genotype)
                                        Df SumOfSqs       F parOmegaSq Pr(>F)    
Coral.log_TP4$Origin                     1   0.0204  0.1301  -0.019276  0.921    
Coral.log_TP4$Site                       1   2.5446 16.2273   0.248701  0.001 ***
Coral.log_TP4$Origin:Coral.log_TP4$Site  1   0.2287  1.4586   0.009870  0.198    
Residual                                42   6.5861                              
Total                                   45   9.3799                              
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##Check dispersion by Origin
TP4.disp_orig<-anova(betadisper(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin))
TP4.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.00639 0.006388  0.1952 0.6608
Residuals 44 1.44022 0.032732               
##Check dispersion by Site
TP4.disp_site<-anova(betadisper(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean"), Coral.log_TP4$Site))
TP4.disp_site
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.01153 0.011529  0.3704 0.5459
Residuals 44 1.36932 0.031121               
##Check dispersion by Origin:Site
TP4.disp_os<-anova(betadisper(vegdist(Coral.log_TP4[,c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin:Coral.log_TP4$Site))
TP4.disp_os
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     3 0.04203 0.014012  0.4161 0.7423
Residuals 42 1.41428 0.033673               
##Save results
PERM_T4.res<-data.frame(adonis_OmegaSq(Coral.TP4.perm)[1:3,])
PERM_T4.res$Predictor<-c("Origin", "Site", "Origin x Site")
PERM_T4.res$p_DISP<-c(TP4.disp_orig$`Pr(>F)`[1], TP4.disp_site$`Pr(>F)`[1], TP4.disp_os$`Pr(>F)`[1])

Effect Size

Calculate Effect Size of Origin for each Site

##KL
##PERMANOVA
Coral.TP4.perm_KL<-adonis2(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="KL"),c(11:14, 16)], "euclidean")~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="KL")], data=Coral.log_TP4[which(Coral.log_TP4$Site=="KL"),], strata=Coral.log_TP4$Genotype[which(Coral.log_TP4$Site=="KL")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP4.perm_KL)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP4[which(Coral.log_TP4$Site == "KL"), c(11:14, 16)], "euclidean") ~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "KL")], data = Coral.log_TP4[which(Coral.log_TP4$Site == "KL"), ], method = "euclidean", strata = Coral.log_TP4$Genotype[which(Coral.log_TP4$Site == "KL")])
                                                        Df SumOfSqs      F parOmegaSq Pr(>F)
Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "KL")]  1   0.0676 0.3774  -0.027823  0.688
Residual                                                21   3.7601                         
Total                                                   22   3.8277                         
##Check dispersion by Origin
TP4.KL.disp_orig<-anova(betadisper(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="KL"),c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="KL")]))
TP4.KL.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.00316 0.003160  0.0776 0.7833
Residuals 21 0.85503 0.040716               
##SS
##PERMANOVA
Coral.TP4.perm_SS<-adonis2(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="SS"),c(11:14, 16)], "euclidean")~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="SS")], data=Coral.log_TP4[which(Coral.log_TP4$Site=="SS"),], strata=Coral.log_TP4$Genotype[which(Coral.log_TP4$Site=="SS")], method="euclidean")

##Effect Size
adonis_OmegaSq(Coral.TP4.perm_SS)
Permutation test for adonis under reduced model
Terms added sequentially (first to last)
Blocks:  strata 
Permutation: free
Number of permutations: 999

adonis2(formula = vegdist(Coral.log_TP4[which(Coral.log_TP4$Site == "SS"), c(11:14, 16)], "euclidean") ~ Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "SS")], data = Coral.log_TP4[which(Coral.log_TP4$Site == "SS"), ], method = "euclidean", strata = Coral.log_TP4$Genotype[which(Coral.log_TP4$Site == "SS")])
                                                        Df SumOfSqs     F parOmegaSq Pr(>F)
Coral.log_TP4$Origin[which(Coral.log_TP4$Site == "SS")]  1  0.18154 1.349   0.014948  0.138
Residual                                                21  2.82599                        
Total                                                   22  3.00753                        
##Check dispersion by Origin
TP4.SS.disp_orig<-anova(betadisper(vegdist(Coral.log_TP4[which(Coral.log_TP4$Site=="SS"),c(11:14, 16)], "euclidean"), Coral.log_TP4$Origin[which(Coral.log_TP4$Site=="SS")]))
TP4.SS.disp_orig
Analysis of Variance Table

Response: Distances
          Df  Sum Sq  Mean Sq F value Pr(>F)
Groups     1 0.02157 0.021572    0.81 0.3783
Residuals 21 0.55925 0.026631               
##Save results
PERM_T4.site.res<-data.frame(adonis_OmegaSq(Coral.TP4.perm_KL)[1,])
PERM_T4.site.res<-rbind(PERM_T4.site.res, data.frame(adonis_OmegaSq(Coral.TP4.perm_SS)[1,]))
PERM_T4.site.res$Predictor<-c("KL Origin", "SS Origin")
PERM_T4.site.res$p_DISP<-c(TP4.KL.disp_orig$`Pr(>F)`[1], TP4.SS.disp_orig$`Pr(>F)`[1])

##Combine results 
PERM_T4.res<-rbind(PERM_T4.res, PERM_T4.site.res)
PERM_T4.res$Timepoint<-rep("TP4", nrow(PERM_T4.res))

Univariate

TP1

##Subset Timepoint 1 
Coral.TP1<-subset(Coral.rm, TimeP=="TP1")

Protein Host

##Check normality
hist(Coral.TP1$TP_ug.cm2_C)

shapiro.test(Coral.TP1$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_C
W = 0.98637, p-value = 0.8448
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP1<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.C.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.C.lme_TP1, plot = F)
plot(Prot.C.lme_res_TP1)


##Model results
summary(Prot.C.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 476.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.98711 -0.58176 -0.00143  0.76130  1.61635 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1703     41.27   
 Residual             2107     45.91   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)              340.714     27.262   2.948  12.498  0.00120 **
OriginTransplant           3.303     18.741  42.000   0.176  0.86096   
SiteSS                    55.261     18.741  42.000   2.949  0.00519 **
OriginTransplant:SiteSS  -31.334     26.504  42.000  -1.182  0.24375   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.344              
SiteSS      -0.344  0.500       
OrgnTrn:SSS  0.243 -0.707 -0.707
eta_squared(Prot.C.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.18 | [0.04, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP1.res<-data.frame(summary(Prot.C.lme_TP1)$coefficients[-1,])
Prot.C_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP1.res$EtaSq<-c(eta_squared(Prot.C.lme_TP1)$Eta2)
Prot.C_TP1.res$Response<-rep("Protein Host", nrow(Prot.C_TP1.res))

Protein Symbiont

##Check normality
hist(Coral.TP1$TP_ug.cm2_S)

shapiro.test(Coral.TP1$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$TP_ug.cm2_S
W = 0.96018, p-value = 0.1027
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP1<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Prot.S.lme_res_TP1 <- simulateResiduals(fittedModel = Prot.S.lme_TP1, plot = F)
plot(Prot.S.lme_res_TP1)


##Model results
summary(Prot.S.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 504.7

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.99771 -0.58981 -0.06134  0.48297  2.49136 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1613     40.17   
 Residual             4087     63.93   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              459.014     29.638   3.945  15.488 0.000111 ***
OriginTransplant           1.258     26.100  42.000   0.048 0.961800    
SiteSS                    42.145     26.100  42.000   1.615 0.113851    
OriginTransplant:SiteSS  -86.531     36.910  42.000  -2.344 0.023864 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.440              
SiteSS      -0.440  0.500       
OrgnTrn:SSS  0.311 -0.707 -0.707
eta_squared(Prot.S.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.11 | [0.01, 1.00]
Site        |       8.78e-05 | [0.00, 1.00]
Origin:Site |           0.12 | [0.01, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP1.res<-data.frame(summary(Prot.S.lme_TP1)$coefficients[-1,])
Prot.S_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP1.res$EtaSq<-c(eta_squared(Prot.S.lme_TP1)$Eta2)
Prot.S_TP1.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP1.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP1_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Prot.S.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: 254.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.64984 -0.68376 -0.07079  0.30913  2.31492 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 2602     51.01   
 Residual             4223     64.99   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)       459.014     34.918   2.724  13.145  0.00153 **
OriginTransplant    1.258     26.531  20.000   0.047  0.96267   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.380
eta_squared(Prot.S.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       1.12e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP1_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Prot.S.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: 251.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7405 -0.5819 -0.2580  0.6750  2.1154 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  695.5   26.37   
 Residual             3899.6   62.45   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       501.158     23.596   3.921  21.239  3.4e-05 ***
OriginTransplant  -85.273     25.494  20.000  -3.345  0.00323 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.540
eta_squared(Prot.S.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.36 | [0.10, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP1.site.res<-data.frame(rbind(summary(Prot.S.lme_TP1_KL)$coefficients[-1,],
                                      summary(Prot.S.lme_TP1_SS)$coefficients[-1,]))
Prot.S_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP1.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP1_KL)$Eta2, eta_squared(Prot.S.lme_TP1_SS)$Eta2)
Prot.S_TP1.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP1.site.res))

##Combine results 
Prot.S_TP1.res<-rbind(Prot.S_TP1.res, Prot.S_TP1.site.res)
##Summary statistics by Site and Origin
TP1_ProtSym.sum<-summarySE(Coral.TP1, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP1_ProtSym.plot<-ggplot(TP1_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550)+
  annotate("text", x=2, y=535, label="**", size=sig.sz, fontface="bold"); TP1_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_C)

shapiro.test(Coral.TP1$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_C
W = 0.96547, p-value = 0.1677
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP1<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.C.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.C.lme_TP1, plot = F)
plot(Bio.C.lme_res_TP1)


##Model results
summary(Bio.C.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: 17.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.3616 -0.6323  0.1012  0.6827  1.4522 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.006352 0.0797  
 Residual             0.067274 0.2594  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              1.20320    0.08788  9.02171  13.691 2.43e-07 ***
OriginTransplant        -0.18538    0.10589 42.00000  -1.751   0.0873 .  
SiteSS                  -0.01392    0.10589 42.00000  -0.131   0.8961    
OriginTransplant:SiteSS  0.04772    0.14975 42.00000   0.319   0.7516    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.602              
SiteSS      -0.602  0.500       
OrgnTrn:SSS  0.426 -0.707 -0.707
eta_squared(Bio.C.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.10 | [0.00, 1.00]
Site        |       4.20e-04 | [0.00, 1.00]
Origin:Site |       2.41e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP1.res<-data.frame(summary(Bio.C.lme_TP1)$coefficients[-1,])
Bio.C_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP1.res$EtaSq<-c(eta_squared(Bio.C.lme_TP1)$Eta2)
Bio.C_TP1.res$Response<-rep("Biomass Host", nrow(Bio.C_TP1.res))

Effect size of Origin for each Site

##KL
Bio.C.lme_TP1_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Bio.C.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: 1.1

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.61169 -0.43907  0.07185  0.60072  1.71208 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.003322 0.05764 
 Residual             0.047206 0.21727 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)        1.2032     0.0710  5.1663   16.95 9.99e-06 ***
OriginTransplant  -0.1854     0.0887 20.0000   -2.09   0.0496 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.625
eta_squared(Bio.C.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.18 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP1_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Bio.C.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: 15.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9881 -0.5903  0.3895  0.6868  1.3845 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0002328 0.01526 
 Residual             0.0939949 0.30659 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.18928    0.08894  7.15744   13.37 2.53e-06 ***
OriginTransplant -0.13767    0.12516 20.00012   -1.10    0.284    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.704
eta_squared(Bio.C.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP1.site.res<-data.frame(rbind(summary(Bio.C.lme_TP1_KL)$coefficients[-1,],
                                      summary(Bio.C.lme_TP1_SS)$coefficients[-1,]))
Bio.C_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP1.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP1_KL)$Eta2, eta_squared(Bio.C.lme_TP1_SS)$Eta2)
Bio.C_TP1.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP1.site.res))

##Combine results 
Bio.C_TP1.res<-rbind(Bio.C_TP1.res, Bio.C_TP1.site.res)
##Summary statistics by Site and Origin
TP1_BioHost.sum<-summarySE(Coral.TP1, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP1_BioHost.plot<-ggplot(TP1_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz),
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position = "top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6)+
   annotate("text", x=1, y=1.3, label="*", size=sig.sz, fontface="bold"); TP1_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP1$AFDW_mg.cm2_S)

shapiro.test(Coral.TP1$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP1$AFDW_mg.cm2_S
W = 0.97584, p-value = 0.4194
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP1<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Bio.S.lme_res_TP1 <- simulateResiduals(fittedModel = Bio.S.lme_TP1, plot = F)
plot(Bio.S.lme_res_TP1)


##Model results
summary(Bio.S.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: -29.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.71364 -0.74817 -0.06341  0.60227  2.13813 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.002785 0.05277 
 Residual             0.022713 0.15071 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.57323    0.05311  7.72575  10.792 6.25e-06 ***
OriginTransplant         0.01058    0.06153 42.00000   0.172   0.8642    
SiteSS                   0.16334    0.06153 42.00000   2.655   0.0112 *  
OriginTransplant:SiteSS -0.22488    0.08701 42.00000  -2.584   0.0133 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.579              
SiteSS      -0.579  0.500       
OrgnTrn:SSS  0.410 -0.707 -0.707
eta_squared(Bio.S.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.12 | [0.01, 1.00]
Site        |           0.03 | [0.00, 1.00]
Origin:Site |           0.14 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP1.res<-data.frame(summary(Bio.S.lme_TP1)$coefficients[-1,])
Bio.S_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP1.res$EtaSq<-c(eta_squared(Bio.S.lme_TP1)$Eta2)
Bio.S_TP1.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP1.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP1_KL<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Bio.S.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: -21.1

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.72868 -0.71431  0.04303  0.52737  1.90341 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01040  0.1020  
 Residual             0.01508  0.1228  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)       0.57323    0.06873  2.65466   8.340  0.00563 **
OriginTransplant  0.01058    0.05014 20.00000   0.211  0.83496   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.365
eta_squared(Bio.S.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       2.22e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP1_SS<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Bio.S.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: -13.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.2456 -0.7860 -0.1378  0.6402  2.1806 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.004289 0.06549 
 Residual             0.023707 0.15397 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.73657    0.05836  3.90305  12.622 0.000262 ***
OriginTransplant -0.21429    0.06286 20.00000  -3.409 0.002782 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.539
eta_squared(Bio.S.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.37 | [0.10, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP1.site.res<-data.frame(rbind(summary(Bio.S.lme_TP1_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP1_SS)$coefficients[-1,]))
Bio.S_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP1.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP1_KL)$Eta2, eta_squared(Bio.S.lme_TP1_SS)$Eta2)
Bio.S_TP1.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP1.site.res))

##Combine results 
Bio.S_TP1.res<-rbind(Bio.S_TP1.res, Bio.S_TP1.site.res)
##Summary statistics by Site and Origin
TP1_BioSym.sum<-summarySE(Coral.TP1, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP1_BioSym.plot<-ggplot(TP1_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95)+
  annotate("text", x=2, y=0.8, label="**", size=sig.sz, fontface="bold"); TP1_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP1$Chl_ug.cm2)

shapiro.test(Coral.TP1$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP1$Chl_ug.cm2
W = 0.95564, p-value = 0.06727
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP1<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP1)

##Check residuals
Chl.lme_res_TP1 <- simulateResiduals(fittedModel = Chl.lme_TP1, plot = F)
plot(Chl.lme_res_TP1)


##Model results
summary(Chl.lme_TP1)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP1

REML criterion at convergence: -0.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1377 -0.5871 -0.1548  0.6976  2.0162 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.08669  0.2944  
 Residual             0.03936  0.1984  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.86074    0.17937  2.34405   4.799 0.029564 *  
OriginTransplant         0.07568    0.08099 42.00000   0.934 0.355451    
SiteSS                   0.54382    0.08099 42.00000   6.715 3.73e-08 ***
OriginTransplant:SiteSS -0.48115    0.11454 42.00000  -4.201 0.000136 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.226              
SiteSS      -0.226  0.500       
OrgnTrn:SSS  0.160 -0.707 -0.707
eta_squared(Chl.lme_TP1)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.16 | [0.03, 1.00]
Site        |           0.40 | [0.21, 1.00]
Origin:Site |           0.30 | [0.12, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP1.res<-data.frame(summary(Chl.lme_TP1)$coefficients[-1,])
Chl_TP1.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP1.res$EtaSq<-c(eta_squared(Chl.lme_TP1)$Eta2)
Chl_TP1.res$Response<-rep("Chlorophyll", nrow(Chl_TP1.res))

Effect size of Origin for each Site

##KL
Chl.lme_TP1_KL<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="KL"),])
summary(Chl.lme_TP1_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "KL"), ]

REML criterion at convergence: -4.9

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.42282 -0.68856  0.00126  0.53926  2.32168 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.05037  0.2244  
 Residual             0.02931  0.1712  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)  
(Intercept)       0.86074    0.13868  2.27932   6.207    0.018 *
OriginTransplant  0.07568    0.06989 20.00000   1.083    0.292  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.252
eta_squared(Chl.lme_TP1_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP1_SS<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP1[which(Coral.TP1$Site=="SS"),])
summary(Chl.lme_TP1_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP1[which(Coral.TP1$Site == "SS"), ]

REML criterion at convergence: 2.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0949 -0.5799  0.1160  0.6297  1.7750 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.13767  0.3710  
 Residual             0.03874  0.1968  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.40456    0.22163  2.13798   6.338   0.0203 *  
OriginTransplant -0.40548    0.08035 20.00000  -5.046 6.18e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.181
eta_squared(Chl.lme_TP1_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.56 | [0.30, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP1.site.res<-data.frame(rbind(summary(Chl.lme_TP1_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP1_SS)$coefficients[-1,]))
Chl_TP1.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP1.site.res$EtaSq<-c(eta_squared(Chl.lme_TP1_KL)$Eta2, eta_squared(Chl.lme_TP1_SS)$Eta2)
Chl_TP1.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP1.site.res))

##Combine results 
Chl_TP1.res<-rbind(Chl_TP1.res, Chl_TP1.site.res)
##Summary statistics by Site and Origin
TP1_Chl.sum<-summarySE(Coral.TP1, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP1_Chl.plot<-ggplot(TP1_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25)+
  annotate("text", x=2, y=1.7, label="***", size=sig.sz, fontface="bold"); TP1_Chl.plot

Save Results

##Combine Results
Phys_T1.res<-rbind(Prot.C_TP1.res, Prot.S_TP1.res, Bio.C_TP1.res, Bio.S_TP1.res, Chl_TP1.res)

##Add Timepoint
Phys_T1.res$TimeP<-rep("TP1", nrow(Phys_T1.res))

TP2

##Subset Timepoint 2 
Coral.TP2<-subset(Coral.rm, TimeP=="TP2")

Protein Host

##Check normality
hist(Coral.TP2$TP_ug.cm2_C)

shapiro.test(Coral.TP2$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_C
W = 0.9796, p-value = 0.562
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP2<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.C.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.C.lme_TP2, plot = F)
plot(Prot.C.lme_res_TP2)


##Model results
summary(Prot.C.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: 469.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.67310 -0.67673 -0.00324  0.57592  1.67096 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  391.9   19.80   
 Residual             1877.0   43.32   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              315.853     16.942   5.593  18.643    3e-06 ***
OriginTransplant          -1.965     17.687  42.000  -0.111   0.9121    
SiteSS                    42.263     17.687  42.000   2.389   0.0214 *  
OriginTransplant:SiteSS    8.579     25.013  42.000   0.343   0.7333    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.522              
SiteSS      -0.522  0.500       
OrgnTrn:SSS  0.369 -0.707 -0.707
eta_squared(Prot.C.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       8.22e-04 | [0.00, 1.00]
Site        |           0.25 | [0.08, 1.00]
Origin:Site |       2.79e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP2.res<-data.frame(summary(Prot.C.lme_TP2)$coefficients[-1,])
Prot.C_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP2.res$EtaSq<-c(eta_squared(Prot.C.lme_TP2)$Eta2)
Prot.C_TP2.res$Response<-rep("Protein Host", nrow(Prot.C_TP2.res))

Protein Symbiont

##Check normality
hist(Coral.TP2$TP_ug.cm2_S)

shapiro.test(Coral.TP2$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$TP_ug.cm2_S
W = 0.95982, p-value = 0.09929
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP2<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Prot.S.lme_res_TP2 <- simulateResiduals(fittedModel = Prot.S.lme_TP2, plot = F)
plot(Prot.S.lme_res_TP2)


##Model results
summary(Prot.S.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: 493.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.5114 -0.6809 -0.1247  0.6145  2.6570 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  796.1   28.22   
 Residual             3198.1   56.55   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              329.068     23.062   5.046  14.269 2.85e-05 ***
OriginTransplant         -29.475     23.087  42.000  -1.277    0.209    
SiteSS                    43.245     23.087  42.000   1.873    0.068 .  
OriginTransplant:SiteSS   35.173     32.650  42.000   1.077    0.288    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.501              
SiteSS      -0.501  0.500       
OrgnTrn:SSS  0.354 -0.707 -0.707
eta_squared(Prot.S.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.01 | [0.00, 1.00]
Site        |           0.25 | [0.08, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP2.res<-data.frame(summary(Prot.S.lme_TP2)$coefficients[-1,])
Prot.S_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP2.res$EtaSq<-c(eta_squared(Prot.S.lme_TP2)$Eta2)
Prot.S_TP2.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP2.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP2_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
summary(Prot.S.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: 238.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.4406 -0.8006  0.2111  0.5424  1.7322 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  688.7   26.24   
 Residual             2134.1   46.20   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       329.068     20.185   3.247  16.303 0.000316 ***
OriginTransplant  -29.475     18.860  20.000  -1.563 0.133770    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.467
eta_squared(Prot.S.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.11 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP2_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
summary(Prot.S.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: 251.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.3034 -0.8616  0.0128  0.6244  2.1515 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1484     38.53   
 Residual             3840     61.96   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       372.313     28.545   3.078  13.043 0.000854 ***
OriginTransplant    5.698     25.297  20.000   0.225 0.824065    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.443
eta_squared(Prot.S.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       2.53e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP2.site.res<-data.frame(rbind(summary(Prot.S.lme_TP2_KL)$coefficients[-1,],
                                     summary(Prot.S.lme_TP2_SS)$coefficients[-1,]))
Prot.S_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP2.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP2_KL)$Eta2, eta_squared(Prot.S.lme_TP2_SS)$Eta2)
Prot.S_TP2.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP2.site.res))

##Combine results 
Prot.S_TP2.res<-rbind(Prot.S_TP2.res, Prot.S_TP2.site.res)
##Summary statistics by Site and Origin
TP2_ProtSym.sum<-summarySE(Coral.TP2, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP2_ProtSym.plot<-ggplot(TP2_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550); TP2_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_C)

shapiro.test(Coral.TP2$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_C
W = 0.98545, p-value = 0.8093
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP2<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.C.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.C.lme_TP2, plot = F)
plot(Bio.C.lme_res_TP2)


##Model results
summary(Bio.C.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: -19.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.2645 -0.4732 -0.0846  0.5858  2.5448 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.002429 0.04928 
 Residual             0.028719 0.16947 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              1.16312    0.05659  9.60683  20.552 2.91e-09 ***
OriginTransplant        -0.10184    0.06918 42.00000  -1.472   0.1485    
SiteSS                  -0.11111    0.06918 42.00000  -1.606   0.1158    
OriginTransplant:SiteSS  0.26062    0.09784 42.00000   2.664   0.0109 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.611              
SiteSS      -0.611  0.500       
OrgnTrn:SSS  0.432 -0.707 -0.707
eta_squared(Bio.C.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       8.00e-03 | [0.00, 1.00]
Site        |       3.65e-03 | [0.00, 1.00]
Origin:Site |           0.14 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP2.res<-data.frame(summary(Bio.C.lme_TP2)$coefficients[-1,])
Bio.C_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP2.res$EtaSq<-c(eta_squared(Bio.C.lme_TP2)$Eta2)
Bio.C_TP2.res$Response<-rep("Biomass Host", nrow(Bio.C_TP2.res))

Effect size of Origin for each Site

##KL
Bio.C.lme_TP2_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
summary(Bio.C.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: -14.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7100 -0.5598 -0.2566  0.3597  2.9272 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.001355 0.03681 
 Residual             0.023645 0.15377 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.16312    0.04921  5.42756  23.634 1.11e-06 ***
OriginTransplant -0.10184    0.06278 20.00000  -1.622     0.12    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.638
eta_squared(Bio.C.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.12 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP2_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.C.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: -5.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.0676 -0.4964  0.1545  0.7280  1.2050 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03634  0.1906  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.05201    0.05503 22.00000   19.12 3.42e-15 ***
OriginTransplant  0.15878    0.07783 22.00000    2.04   0.0535 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.707
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.C.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.16 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP2.site.res<-data.frame(rbind(summary(Bio.C.lme_TP2_KL)$coefficients[-1,],
                                     summary(Bio.C.lme_TP2_SS)$coefficients[-1,]))
Bio.C_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP2.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP2_KL)$Eta2, eta_squared(Bio.C.lme_TP2_SS)$Eta2)
Bio.C_TP2.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP2.site.res))

##Combine results 
Bio.C_TP2.res<-rbind(Bio.C_TP2.res, Bio.C_TP2.site.res)
##Summary statistics by Site and Origin
TP2_BioHost.sum<-summarySE(Coral.TP2, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP2_BioHost.plot<-ggplot(TP2_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6)+
  annotate("text", x=2, y=1.35, label="-", size=levels.sz, fontface="bold"); TP2_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP2$AFDW_mg.cm2_S)

shapiro.test(Coral.TP2$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP2$AFDW_mg.cm2_S
W = 0.98263, p-value = 0.6911
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP2<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Bio.S.lme_res_TP2 <- simulateResiduals(fittedModel = Bio.S.lme_TP2, plot = F)
plot(Bio.S.lme_res_TP2)


##Model results
summary(Bio.S.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: -50.2

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.89274 -0.61267 -0.05248  0.62439  1.64962 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0003874 0.01968 
 Residual             0.0146825 0.12117 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.71562    0.03678 15.95638  19.457 1.54e-12 ***
OriginTransplant        -0.12045    0.04947 42.00000  -2.435   0.0192 *  
SiteSS                   0.12854    0.04947 42.00000   2.599   0.0129 *  
OriginTransplant:SiteSS  0.11020    0.06996 42.00000   1.575   0.1227    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.673              
SiteSS      -0.673  0.500       
OrgnTrn:SSS  0.476 -0.707 -0.707
eta_squared(Bio.S.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.08 | [0.00, 1.00]
Site        |           0.40 | [0.21, 1.00]
Origin:Site |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP2.res<-data.frame(summary(Bio.S.lme_TP2)$coefficients[-1,])
Bio.S_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP2.res$EtaSq<-c(eta_squared(Bio.S.lme_TP2)$Eta2)
Bio.S_TP2.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP2.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP2_KL<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.S.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: -25.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7872 -0.5807 -0.0580  0.6095  1.5698 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.01486  0.1219  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.71562    0.03519 22.00000   20.34 9.41e-16 ***
OriginTransplant -0.12045    0.04977 22.00000   -2.42   0.0242 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.707
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.21 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP2_SS<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
summary(Bio.S.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: -27.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7098 -0.5388 -0.1840  0.6014  1.8524 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.004978 0.07056 
 Residual             0.011447 0.10699 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.84416    0.05112  2.97784  16.513 0.000504 ***
OriginTransplant -0.01025    0.04368 20.00000  -0.235 0.816917    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.427
eta_squared(Bio.S.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       2.74e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP2.site.res<-data.frame(rbind(summary(Bio.S.lme_TP2_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP2_SS)$coefficients[-1,]))
Bio.S_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP2.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP2_KL)$Eta2, eta_squared(Bio.S.lme_TP2_SS)$Eta2)
Bio.S_TP2.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP2.site.res))

##Combine results 
Bio.S_TP2.res<-rbind(Bio.S_TP2.res, Bio.S_TP2.site.res)
##Summary statistics by Site and Origin
TP2_BioSym.sum<-summarySE(Coral.TP2, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP2_BioSym.plot<-ggplot(TP2_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position= "top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95)+
  annotate("text", x=1, y=0.78, label="*", size=sig.sz, fontface="bold"); TP2_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP2$Chl_ug.cm2)

shapiro.test(Coral.TP2$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP2$Chl_ug.cm2
W = 0.89322, p-value = 0.0003826
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP2<-lmer(Chl_ug.cm2~Origin*Site+(1|Genotype), data=Coral.TP2)

##Check residuals
Chl.lme_res_TP2 <- simulateResiduals(fittedModel = Chl.lme_TP2, plot = F)
plot(Chl.lme_res_TP2)


##Model results
summary(Chl.lme_TP2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP2

REML criterion at convergence: 60.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.5646 -0.6834 -0.2260  0.6331  2.9227 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.02999  0.1732  
 Residual             0.17246  0.4153  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)               1.2824     0.1561  6.2441   8.216 0.000142 ***
OriginTransplant         -0.2475     0.1695 42.0000  -1.460 0.151795    
SiteSS                    0.5567     0.1695 42.0000   3.284 0.002071 ** 
OriginTransplant:SiteSS   0.6593     0.2398 42.0000   2.750 0.008761 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.543              
SiteSS      -0.543  0.500       
OrgnTrn:SSS  0.384 -0.707 -0.707
eta_squared(Chl.lme_TP2)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.01 | [0.00, 1.00]
Site        |           0.57 | [0.40, 1.00]
Origin:Site |           0.15 | [0.02, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP2.res<-data.frame(summary(Chl.lme_TP2)$coefficients[-1,])
Chl_TP2.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP2.res$EtaSq<-c(eta_squared(Chl.lme_TP2)$Eta2)
Chl_TP2.res$Response<-rep("Chlorophyll", nrow(Chl_TP2.res))

Effect size of Origin for each Site

##KL
Chl.lme_TP2_KL<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="KL"),])
summary(Chl.lme_TP2_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "KL"), ]

REML criterion at convergence: 4.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.4118 -0.7633 -0.1784  0.6717  2.0082 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01088  0.1043  
 Residual             0.05353  0.2314  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.28244    0.08993  3.75836   14.26 0.000207 ***
OriginTransplant -0.24748    0.09445 20.00000   -2.62 0.016394 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.525
eta_squared(Chl.lme_TP2_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.26 | [0.03, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP2_SS<-lmer(Chl_ug.cm2~Origin+(1|Genotype), data=Coral.TP2[which(Coral.TP2$Site=="SS"),])
summary(Chl.lme_TP2_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Chl_ug.cm2 ~ Origin + (1 | Genotype)
   Data: Coral.TP2[which(Coral.TP2$Site == "SS"), ]

REML criterion at convergence: 36.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.2515 -0.7498 -0.1994  0.6152  2.0640 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.1653   0.4065  
 Residual             0.2069   0.4548  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)  
(Intercept)        1.8391     0.2689  2.5731   6.838   0.0103 *
OriginTransplant   0.4118     0.1857 20.0000   2.218   0.0383 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.345
eta_squared(Chl.lme_TP2_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.20 | [0.01, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP2.site.res<-data.frame(rbind(summary(Chl.lme_TP2_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP2_SS)$coefficients[-1,]))
Chl_TP2.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP2.site.res$EtaSq<-c(eta_squared(Chl.lme_TP2_KL)$Eta2, eta_squared(Chl.lme_TP2_SS)$Eta2)
Chl_TP2.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP2.site.res))

##Combine results 
Chl_TP2.res<-rbind(Chl_TP2.res, Chl_TP2.site.res)
##Summary statistics by Site and Origin
TP2_Chl.sum<-summarySE(Coral.TP2, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP2_Chl.plot<-ggplot(TP2_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position= "top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25)+
  annotate("text", x=c(1,2), y=c(1.5, 2.6), label="*", size=sig.sz, fontface="bold"); TP2_Chl.plot

Save Results

##Combine Results
Phys_T2.res<-rbind(Prot.C_TP2.res, Prot.S_TP2.res, Bio.C_TP2.res, Bio.S_TP2.res, Chl_TP2.res)

##Add Timepoint
Phys_T2.res$TimeP<-rep("TP2", nrow(Phys_T2.res))

TP3

##Subset Timepoint 3 
Coral.TP3<-subset(Coral.rm, TimeP=="TP3")

Protein Host

##Check normality
hist(Coral.TP3$TP_ug.cm2_C)

shapiro.test(Coral.TP3$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_C
W = 0.97395, p-value = 0.3582
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP3<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.C.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.C.lme_TP3, plot = F)
plot(Prot.C.lme_res_TP3)


##Model results
summary(Prot.C.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: 507.3

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.52281 -0.56107 -0.09932  0.69343  2.85970 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 1765     42.01   
 Residual             4332     65.82   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              354.577     30.812   3.885  11.508 0.000382 ***
OriginTransplant         -28.338     26.869  42.000  -1.055 0.297608    
SiteSS                    11.510     26.869  42.000   0.428 0.670560    
OriginTransplant:SiteSS    6.695     37.999  42.000   0.176 0.861001    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.436              
SiteSS      -0.436  0.500       
OrgnTrn:SSS  0.308 -0.707 -0.707
eta_squared(Prot.C.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.04 | [0.00, 1.00]
Site        |           0.01 | [0.00, 1.00]
Origin:Site |       7.38e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP3.res<-data.frame(summary(Prot.C.lme_TP3)$coefficients[-1,])
Prot.C_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP3.res$EtaSq<-c(eta_squared(Prot.C.lme_TP3)$Eta2)
Prot.C_TP3.res$Response<-rep("Protein Host", nrow(Prot.C_TP3.res))

Protein Symbiont

##Check normality
hist(Coral.TP3$TP_ug.cm2_S)

shapiro.test(Coral.TP3$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$TP_ug.cm2_S
W = 0.95992, p-value = 0.1002
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP3<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Prot.S.lme_res_TP3 <- simulateResiduals(fittedModel = Prot.S.lme_TP3, plot = F)
plot(Prot.S.lme_res_TP3)


##Model results
summary(Prot.S.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: 497.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.04853 -0.63564 -0.04301  0.40723  2.41329 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  606.5   24.63   
 Residual             3588.9   59.91   
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              350.037     22.388   6.353  15.635 2.61e-06 ***
OriginTransplant         -31.070     24.457  42.000  -1.270    0.211    
SiteSS                    54.236     24.457  42.000   2.218    0.032 *  
OriginTransplant:SiteSS   40.425     34.588  42.000   1.169    0.249    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.546              
SiteSS      -0.546  0.500       
OrgnTrn:SSS  0.386 -0.707 -0.707
eta_squared(Prot.S.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       9.30e-03 | [0.00, 1.00]
Site        |           0.31 | [0.13, 1.00]
Origin:Site |           0.03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP3.res<-data.frame(summary(Prot.S.lme_TP3)$coefficients[-1,])
Prot.S_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP3.res$EtaSq<-c(eta_squared(Prot.S.lme_TP3)$Eta2)
Prot.S_TP3.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP3.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP3_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Prot.S.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: 240.3

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.73973 -0.61677 -0.06905  0.34373  2.28780 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  267.5   16.36   
 Residual             2444.8   49.45   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       350.037     17.114   4.572  20.453 1.14e-05 ***
OriginTransplant  -31.070     20.186  20.000  -1.539    0.139    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.590
eta_squared(Prot.S.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.11 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP3_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Prot.S.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: 255.5

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.80428 -0.53697  0.01298  0.48663  2.22260 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  939.7   30.66   
 Residual             4737.1   68.83   
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       404.272     26.608   3.788  15.193 0.000156 ***
OriginTransplant    9.355     28.098  20.000   0.333 0.742643    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.528
eta_squared(Prot.S.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       5.51e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP3.site.res<-data.frame(rbind(summary(Prot.S.lme_TP3_KL)$coefficients[-1,],
                                     summary(Prot.S.lme_TP3_SS)$coefficients[-1,]))
Prot.S_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP3.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP3_KL)$Eta2, eta_squared(Prot.S.lme_TP3_SS)$Eta2)
Prot.S_TP3.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP3.site.res))

##Combine results 
Prot.S_TP3.res<-rbind(Prot.S_TP3.res, Prot.S_TP3.site.res)
##Summary statistics by Site and Origin
TP3_ProtSym.sum<-summarySE(Coral.TP3, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP3_ProtSym.plot<-ggplot(TP3_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550); TP3_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_C)

shapiro.test(Coral.TP3$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_C
W = 0.98042, p-value = 0.5962
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP3<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.C.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.C.lme_TP3, plot = F)
plot(Bio.C.lme_res_TP3)


##Model results
summary(Bio.C.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: 1.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.39331 -0.54299  0.06699  0.61611  2.15929 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.007168 0.08467 
 Residual             0.045972 0.21441 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              1.18826    0.07887  6.67318  15.066 2.12e-06 ***
OriginTransplant        -0.12291    0.08753 42.00000  -1.404    0.168    
SiteSS                   0.09539    0.08753 42.00000   1.090    0.282    
OriginTransplant:SiteSS  0.12089    0.12379 42.00000   0.977    0.334    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.555              
SiteSS      -0.555  0.500       
OrgnTrn:SSS  0.392 -0.707 -0.707
eta_squared(Bio.C.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.13 | [0.01, 1.00]
Origin:Site |           0.02 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP3.res<-data.frame(summary(Bio.C.lme_TP3)$coefficients[-1,])
Bio.C_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP3.res$EtaSq<-c(eta_squared(Bio.C.lme_TP3)$Eta2)
Bio.C_TP3.res$Response<-rep("Biomass Host", nrow(Bio.C_TP3.res))

Effect size of Origin for each Site

##KL
Bio.C.lme_TP3_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Bio.C.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: 4.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.11835 -0.65919 -0.03638  0.66514  2.01105 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.002671 0.05168 
 Residual             0.055878 0.23638 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.18826    0.07448  5.64458  15.955 6.53e-06 ***
OriginTransplant -0.12291    0.09650 20.00000  -1.274    0.217    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.648
eta_squared(Bio.C.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.08 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP3_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Bio.C.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: -1.9

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.92899 -0.46522  0.05763  0.57468  2.06374 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.006692 0.0818  
 Residual             0.039684 0.1992  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                  Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)       1.283651   0.074415  3.992959  17.250 6.71e-05 ***
OriginTransplant -0.002024   0.081326 20.000004  -0.025     0.98    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.546
eta_squared(Bio.C.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       3.10e-05 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP3.site.res<-data.frame(rbind(summary(Bio.C.lme_TP3_KL)$coefficients[-1,],
                                     summary(Bio.C.lme_TP3_SS)$coefficients[-1,]))
Bio.C_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP3.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP3_KL)$Eta2, eta_squared(Bio.C.lme_TP3_SS)$Eta2)
Bio.C_TP3.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP3.site.res))

##Combine results 
Bio.C_TP3.res<-rbind(Bio.C_TP3.res, Bio.C_TP3.site.res)
##Summary statistics by Site and Origin
TP3_BioHost.sum<-summarySE(Coral.TP3, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP3_BioHost.plot<-ggplot(TP3_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6); TP3_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP3$AFDW_mg.cm2_S)

shapiro.test(Coral.TP3$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP3$AFDW_mg.cm2_S
W = 0.95017, p-value = 0.04062
#Slightly non Normal

hist(log(Coral.TP3$AFDW_mg.cm2_S+1))

shapiro.test(log(Coral.TP3$AFDW_mg.cm2_S+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP3$AFDW_mg.cm2_S + 1)
W = 0.97082, p-value = 0.2726
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP3<-lmer(log(AFDW_mg.cm2_S+1)~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Bio.S.lme_res_TP3 <- simulateResiduals(fittedModel = Bio.S.lme_TP3, plot = F)
plot(Bio.S.lme_res_TP3)


##Model results
summary(Bio.S.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(AFDW_mg.cm2_S + 1) ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: -59.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9013 -0.6371 -0.1087  0.6759  2.0985 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.001717 0.04143 
 Residual             0.011351 0.10654 
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.50341    0.03896  6.79866  12.920 4.92e-06 ***
OriginTransplant        -0.02185    0.04349 42.00000  -0.502   0.6180    
SiteSS                   0.07684    0.04349 42.00000   1.767   0.0845 .  
OriginTransplant:SiteSS  0.04053    0.06151 42.00000   0.659   0.5136    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.558              
SiteSS      -0.558  0.500       
OrgnTrn:SSS  0.395 -0.707 -0.707
eta_squared(Bio.S.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       6.34e-05 | [0.00, 1.00]
Site        |           0.19 | [0.04, 1.00]
Origin:Site |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP3.res<-data.frame(summary(Bio.S.lme_TP3)$coefficients[-1,])
Bio.S_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP3.res$EtaSq<-c(eta_squared(Bio.S.lme_TP3)$Eta2)
Bio.S_TP3.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP3.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP3_KL<-lmer(log(AFDW_mg.cm2_S+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Bio.S.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(AFDW_mg.cm2_S + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: -32.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.19334 -0.63480 -0.09404  0.31252  2.01340 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.001809 0.04253 
 Residual             0.009689 0.09843 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.50341    0.03755  3.86356  13.405 0.000221 ***
OriginTransplant -0.02185    0.04018 20.00000  -0.544 0.592623    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.535
eta_squared(Bio.S.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP3_SS<-lmer(log(AFDW_mg.cm2_S+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Bio.S.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(AFDW_mg.cm2_S + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: -26.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.70864 -0.59241 -0.00109  0.59598  2.08623 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0008163 0.02857 
 Residual             0.0136003 0.11662 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.58025    0.03749  5.37009  15.478 1.16e-05 ***
OriginTransplant  0.01868    0.04761 20.00000   0.392    0.699    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.635
eta_squared(Bio.S.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       7.63e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP3.site.res<-data.frame(rbind(summary(Bio.S.lme_TP3_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP3_SS)$coefficients[-1,]))
Bio.S_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP3.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP3_KL)$Eta2, eta_squared(Bio.S.lme_TP3_SS)$Eta2)
Bio.S_TP3.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP3.site.res))

##Combine results 
Bio.S_TP3.res<-rbind(Bio.S_TP3.res, Bio.S_TP3.site.res)
##Summary statistics by Site and Origin
TP3_BioSym.sum<-summarySE(Coral.TP3, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP3_BioSym.plot<-ggplot(TP3_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95); TP3_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP3$Chl_ug.cm2)

shapiro.test(Coral.TP3$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP3$Chl_ug.cm2
W = 0.92502, p-value = 0.004491
#Not normal

hist(log(Coral.TP3$Chl_ug.cm2+1))

shapiro.test(log(Coral.TP3$Chl_ug.cm2+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP3$Chl_ug.cm2 + 1)
W = 0.97477, p-value = 0.3837
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP3<-lmer(log(Chl_ug.cm2+1)~Origin*Site+(1|Genotype), data=Coral.TP3)

##Check residuals
Chl.lme_res_TP3 <- simulateResiduals(fittedModel = Chl.lme_TP3, plot = F)
plot(Chl.lme_res_TP3)


##Model results
summary(Chl.lme_TP3)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP3

REML criterion at convergence: -35.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.25062 -0.55117 -0.02076  0.43420  2.75244 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01951  0.1397  
 Residual             0.01831  0.1353  
Number of obs: 48, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)              0.81996    0.08960  2.71679   9.151  0.00406 **
OriginTransplant        -0.10476    0.05525 42.00000  -1.896  0.06483 . 
SiteSS                   0.18045    0.05525 42.00000   3.266  0.00217 **
OriginTransplant:SiteSS  0.13664    0.07813 42.00000   1.749  0.08761 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.308              
SiteSS      -0.308  0.500       
OrgnTrn:SSS  0.218 -0.707 -0.707
eta_squared(Chl.lme_TP3)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |           0.02 | [0.00, 1.00]
Site        |           0.49 | [0.31, 1.00]
Origin:Site |           0.07 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP3.res<-data.frame(summary(Chl.lme_TP3)$coefficients[-1,])
Chl_TP3.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP3.res$EtaSq<-c(eta_squared(Chl.lme_TP3)$Eta2)
Chl_TP3.res$Response<-rep("Chlorophyll", nrow(Chl_TP3.res))

Effect size of Origin for each Site

##KL
Chl.lme_TP3_KL<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="KL"),])
summary(Chl.lme_TP3_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "KL"), ]

REML criterion at convergence: -19

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7968 -0.6704 -0.2815  0.8139  2.1670 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.009698 0.09848 
 Residual             0.016854 0.12982 
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)   
(Intercept)        0.8200     0.0681  2.7687  12.041  0.00179 **
OriginTransplant  -0.1048     0.0530 20.0000  -1.977  0.06205 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.389
eta_squared(Chl.lme_TP3_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.16 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP3_SS<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP3[which(Coral.TP3$Site=="SS"),])
summary(Chl.lme_TP3_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP3[which(Coral.TP3$Site == "SS"), ]

REML criterion at convergence: -16.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.11066 -0.45318 -0.01187  0.63929  2.41481 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.03310  0.1819  
 Residual             0.01702  0.1305  
Number of obs: 24, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)       1.00040    0.11159  2.24803   8.965  0.00837 **
OriginTransplant  0.03189    0.05326 20.00000   0.599  0.55610   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.239
eta_squared(Chl.lme_TP3_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.02 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP3.site.res<-data.frame(rbind(summary(Chl.lme_TP3_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP3_SS)$coefficients[-1,]))
Chl_TP3.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP3.site.res$EtaSq<-c(eta_squared(Chl.lme_TP3_KL)$Eta2, eta_squared(Chl.lme_TP3_SS)$Eta2)
Chl_TP3.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP3.site.res))

##Combine results 
Chl_TP3.res<-rbind(Chl_TP3.res, Chl_TP3.site.res)
##Summary statistics by Site and Origin
TP3_Chl.sum<-summarySE(Coral.TP3, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP3_Chl.plot<-ggplot(TP3_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25)+
  annotate("text", x=1, y=1.5, label="-", size=levels.sz, fontface="bold"); TP3_Chl.plot

Save Results

##Combine Results
Phys_T3.res<-rbind(Prot.C_TP3.res, Prot.S_TP3.res, Bio.C_TP3.res, Bio.S_TP3.res, Chl_TP3.res)

##Add Timepoint
Phys_T3.res$TimeP<-rep("TP3", nrow(Phys_T3.res))

TP4

##Subset Timepoint 4 
Coral.TP4<-subset(Coral.rm, TimeP=="TP4")

Protein Host

##Check normality
hist(Coral.TP4$TP_ug.cm2_C)

shapiro.test(Coral.TP4$TP_ug.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP4$TP_ug.cm2_C
W = 0.97592, p-value = 0.4503
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.C.lme_TP4<-lmer(TP_ug.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Prot.C.lme_res_TP4 <- simulateResiduals(fittedModel = Prot.C.lme_TP4, plot = F)
plot(Prot.C.lme_res_TP4)


##Model results
summary(Prot.C.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: 492.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.82648 -0.74846  0.02454  0.66400  1.93010 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)   23.74   4.872  
 Residual             5739.32  75.758  
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error     df t value Pr(>|t|)    
(Intercept)               329.20      22.05  20.43  14.930 1.86e-12 ***
OriginTransplant           21.29      31.63  40.27   0.673    0.505    
SiteSS                     50.44      30.93  40.12   1.631    0.111    
OriginTransplant:SiteSS   -67.31      44.72  40.12  -1.505    0.140    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.686              
SiteSS      -0.701  0.489       
OrgnTrn:SSS  0.485 -0.707 -0.692
eta_squared(Prot.C.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       7.51e-03 | [0.00, 1.00]
Site        |           0.01 | [0.00, 1.00]
Origin:Site |           0.05 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.C_TP4.res<-data.frame(summary(Prot.C.lme_TP4)$coefficients[-1,])
Prot.C_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.C_TP4.res$EtaSq<-c(eta_squared(Prot.C.lme_TP4)$Eta2)
Prot.C_TP4.res$Response<-rep("Protein Host", nrow(Prot.C_TP4.res))

Protein Symbiont

##Check normality
hist(Coral.TP4$TP_ug.cm2_S)

shapiro.test(Coral.TP4$TP_ug.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP4$TP_ug.cm2_S
W = 0.98874, p-value = 0.9316
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Prot.S.lme_TP4<-lmer(TP_ug.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Prot.S.lme_res_TP4 <- simulateResiduals(fittedModel = Prot.S.lme_TP4, plot = F)
plot(Prot.S.lme_res_TP4)


##Model results
summary(Prot.S.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: 464

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9674 -0.6915 -0.1394  0.7468  1.8746 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  258.6   16.08   
 Residual             2793.9   52.86   
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)              283.146     17.862   8.966  15.852 7.28e-08 ***
OriginTransplant           2.715     22.078  40.118   0.123    0.903    
SiteSS                    94.191     21.579  40.048   4.365 8.71e-05 ***
OriginTransplant:SiteSS  -14.298     31.203  40.048  -0.458    0.649    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.590              
SiteSS      -0.604  0.489       
OrgnTrn:SSS  0.418 -0.707 -0.692
eta_squared(Prot.S.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       2.00e-03 | [0.00, 1.00]
Site        |           0.44 | [0.25, 1.00]
Origin:Site |       5.22e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Prot.S_TP4.res<-data.frame(summary(Prot.S.lme_TP4)$coefficients[-1,])
Prot.S_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Prot.S_TP4.res$EtaSq<-c(eta_squared(Prot.S.lme_TP4)$Eta2)
Prot.S_TP4.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP4.res))

Effect size of Origin for each Site

##KL
Prot.S.lme_TP4_KL<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
summary(Prot.S.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: 233.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9026 -0.5130 -0.1508  0.5988  1.9630 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  123.5   11.11   
 Residual             3004.0   54.81   
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       283.146     17.074   5.322  16.584 8.71e-06 ***
OriginTransplant    2.801     22.890  19.068   0.122    0.904    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.641
eta_squared(Prot.S.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       7.84e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Prot.S.lme_TP4_SS<-lmer(TP_ug.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
summary(Prot.S.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: TP_ug.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: 231.3

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.95275 -0.71834 -0.03221  0.77696  1.62897 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept)  300.3   17.33   
 Residual             2653.9   51.52   
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)       377.337     17.924   4.502   21.05 1.14e-05 ***
OriginTransplant  -10.979     21.525  19.180   -0.51    0.616    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.573
eta_squared(Prot.S.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Prot.S_TP4.site.res<-data.frame(rbind(summary(Prot.S.lme_TP4_KL)$coefficients[-1,],
                                     summary(Prot.S.lme_TP4_SS)$coefficients[-1,]))
Prot.S_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Prot.S_TP4.site.res$EtaSq<-c(eta_squared(Prot.S.lme_TP4_KL)$Eta2, eta_squared(Prot.S.lme_TP4_SS)$Eta2)
Prot.S_TP4.site.res$Response<-rep("Protein Symbiont", nrow(Prot.S_TP4.site.res))

##Combine results 
Prot.S_TP4.res<-rbind(Prot.S_TP4.res, Prot.S_TP4.site.res)
##Summary statistics by Site and Origin
TP4_ProtSym.sum<-summarySE(Coral.TP4, measurevar="TP_ug.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Protein across Treatments
TP4_ProtSym.plot<-ggplot(TP4_ProtSym.sum, aes(x=Site, y=TP_ug.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=TP_ug.cm2_S-se, ymax=TP_ug.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Protein (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(250, 550); TP4_ProtSym.plot

Biomass Host

##Check normality
hist(Coral.TP4$AFDW_mg.cm2_C)

shapiro.test(Coral.TP4$AFDW_mg.cm2_C)

    Shapiro-Wilk normality test

data:  Coral.TP4$AFDW_mg.cm2_C
W = 0.98656, p-value = 0.8669
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.C.lme_TP4<-lmer(AFDW_mg.cm2_C~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Bio.C.lme_res_TP4 <- simulateResiduals(fittedModel = Bio.C.lme_TP4, plot = F)
plot(Bio.C.lme_res_TP4)


##Model results
summary(Bio.C.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: 31.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.94819 -0.65333  0.01107  0.59003  2.21357 

Random effects:
 Groups   Name        Variance  Std.Dev.
 Genotype (Intercept) 0.0006586 0.02566 
 Residual             0.0974518 0.31217 
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.99501    0.09133 19.92205  10.895 7.67e-10 ***
OriginTransplant         0.17260    0.13032 40.29158   1.324   0.1928    
SiteSS                   0.33916    0.12744 40.15351   2.661   0.0111 *  
OriginTransplant:SiteSS -0.38438    0.18428 40.15351  -2.086   0.0434 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.682              
SiteSS      -0.698  0.489       
OrgnTrn:SSS  0.483 -0.707 -0.692
eta_squared(Bio.C.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       1.12e-03 | [0.00, 1.00]
Site        |           0.06 | [0.00, 1.00]
Origin:Site |           0.10 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.C_TP4.res<-data.frame(summary(Bio.C.lme_TP4)$coefficients[-1,])
Bio.C_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.C_TP4.res$EtaSq<-c(eta_squared(Bio.C.lme_TP4)$Eta2)
Bio.C_TP4.res$Response<-rep("Biomass Host", nrow(Bio.C_TP4.res))

Effect size of Origin for each Site


##KL
Bio.C.lme_TP4_KL<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.C.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: 22.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.65092 -0.56347  0.01929  0.47522  1.89563 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.0000   0.0000  
 Residual             0.1361   0.3689  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)        0.9950     0.1065 21.0000   9.344 6.27e-09 ***
OriginTransplant   0.1727     0.1540 21.0000   1.121    0.275    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.C.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.06 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.C.lme_TP4_SS<-lmer(AFDW_mg.cm2_C~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
summary(Bio.C.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_C ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: 4.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.2767 -0.7007  0.1653  0.5506  2.0180 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.009792 0.09895 
 Residual             0.052524 0.22918 
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       1.33417    0.08741  3.82984  15.263 0.000143 ***
OriginTransplant -0.20931    0.09578 19.12799  -2.185 0.041513 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.523
eta_squared(Bio.C.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.20 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.C_TP4.site.res<-data.frame(rbind(summary(Bio.C.lme_TP4_KL)$coefficients[-1,],
                                     summary(Bio.C.lme_TP4_SS)$coefficients[-1,]))
Bio.C_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.C_TP4.site.res$EtaSq<-c(eta_squared(Bio.C.lme_TP4_KL)$Eta2, eta_squared(Bio.C.lme_TP4_SS)$Eta2)
Bio.C_TP4.site.res$Response<-rep("Biomass Host", nrow(Bio.C_TP4.site.res))

##Combine results 
Bio.C_TP4.res<-rbind(Bio.C_TP4.res, Bio.C_TP4.site.res)
##Summary statistics by Site and Origin
TP4_BioHost.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_C", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Host Biomass across Treatments
TP4_BioHost.plot<-ggplot(TP4_BioHost.sum, aes(x=Site, y=AFDW_mg.cm2_C, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_C-se, ymax=AFDW_mg.cm2_C+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Host Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.8, 1.6)+
  annotate("text", x=2, y=1.45, label="*", size=sig.sz, fontface="bold"); TP4_BioHost.plot

Biomass Symbionts

##Check normality
hist(Coral.TP4$AFDW_mg.cm2_S)

shapiro.test(Coral.TP4$AFDW_mg.cm2_S)

    Shapiro-Wilk normality test

data:  Coral.TP4$AFDW_mg.cm2_S
W = 0.96144, p-value = 0.1304
#Normal

##Model 
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Bio.S.lme_TP4<-lmer(AFDW_mg.cm2_S~Origin*Site+(1|Genotype), data=Coral.TP4)
boundary (singular) fit: see help('isSingular')
##Check residuals
Bio.S.lme_res_TP4 <- simulateResiduals(fittedModel = Bio.S.lme_TP4, plot = F)
plot(Bio.S.lme_res_TP4)


##Model results
summary(Bio.S.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: -13.3

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9850 -0.7648 -0.1116  0.6976  1.8287 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03381  0.1839  
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                        Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)              0.58851    0.05308 42.00000  11.087 4.71e-14 ***
OriginTransplant         0.02029    0.07675 42.00000   0.264   0.7928    
SiteSS                   0.15893    0.07507 42.00000   2.117   0.0402 *  
OriginTransplant:SiteSS -0.05653    0.10855 42.00000  -0.521   0.6052    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.692              
SiteSS      -0.707  0.489       
OrgnTrn:SSS  0.489 -0.707 -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       5.14e-04 | [0.00, 1.00]
Site        |           0.12 | [0.01, 1.00]
Origin:Site |       6.42e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Bio.S_TP4.res<-data.frame(summary(Bio.S.lme_TP4)$coefficients[-1,])
Bio.S_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Bio.S_TP4.res$EtaSq<-c(eta_squared(Bio.S.lme_TP4)$Eta2)
Bio.S_TP4.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP4.res))

Effect size of Origin for each Site

##KL
Bio.S.lme_TP4_KL<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.S.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: -9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.8536 -0.7454 -0.2379  0.7005  1.9338 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03023  0.1739  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.58851    0.05019 21.00000   11.72 1.12e-10 ***
OriginTransplant  0.02029    0.07258 21.00000    0.28    0.783    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       3.71e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Bio.S.lme_TP4_SS<-lmer(AFDW_mg.cm2_S~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
boundary (singular) fit: see help('isSingular')
summary(Bio.S.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AFDW_mg.cm2_S ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: -4.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.8877 -0.8214  0.1483  0.7055  1.5821 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.00000  0.0000  
 Residual             0.03739  0.1934  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)       0.74744    0.05582 21.00000  13.391  9.4e-12 ***
OriginTransplant -0.03625    0.08071 21.00000  -0.449    0.658    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.692
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
eta_squared(Bio.S.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       9.51e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Bio.S_TP4.site.res<-data.frame(rbind(summary(Bio.S.lme_TP4_KL)$coefficients[-1,],
                                     summary(Bio.S.lme_TP4_SS)$coefficients[-1,]))
Bio.S_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Bio.S_TP4.site.res$EtaSq<-c(eta_squared(Bio.S.lme_TP4_KL)$Eta2, eta_squared(Bio.S.lme_TP4_SS)$Eta2)
Bio.S_TP4.site.res$Response<-rep("Biomass Symbiont", nrow(Bio.S_TP4.site.res))

##Combine results 
Bio.S_TP4.res<-rbind(Bio.S_TP4.res, Bio.S_TP4.site.res)
##Summary statistics by Site and Origin
TP4_BioSym.sum<-summarySE(Coral.TP4, measurevar="AFDW_mg.cm2_S", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Symbiont Biomass across Treatments
TP4_BioSym.plot<-ggplot(TP4_BioSym.sum, aes(x=Site, y=AFDW_mg.cm2_S, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=AFDW_mg.cm2_S-se, ymax=AFDW_mg.cm2_S+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Symbiont Biomass (mg cm'^-2*")")), colour=NULL)+
  ylim(0.45, 0.95); TP4_BioSym.plot

Chlorophyll

##Check normality
hist(Coral.TP4$Chl_ug.cm2)

shapiro.test(Coral.TP4$Chl_ug.cm2)

    Shapiro-Wilk normality test

data:  Coral.TP4$Chl_ug.cm2
W = 0.94799, p-value = 0.03927
#Slightly non normal

hist(log(Coral.TP4$Chl_ug.cm2+1))

shapiro.test(log(Coral.TP4$Chl_ug.cm2+1))

    Shapiro-Wilk normality test

data:  log(Coral.TP4$Chl_ug.cm2 + 1)
W = 0.97457, p-value = 0.4047
#Normal

##Model
#Function of Site and Origin, with Genotype as a Random effect
#Interactions between Origin and Site
Chl.lme_TP4<-lmer(log(Chl_ug.cm2+1)~Origin*Site+(1|Genotype), data=Coral.TP4)

##Check residuals
Chl.lme_res_TP4 <- simulateResiduals(fittedModel = Chl.lme_TP4, plot = F)
plot(Chl.lme_res_TP4)


##Model results
summary(Chl.lme_TP4)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin * Site + (1 | Genotype)
   Data: Coral.TP4

REML criterion at convergence: -35.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.5527 -0.6247  0.1083  0.5659  1.8596 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.02813  0.1677  
 Residual             0.01693  0.1301  
Number of obs: 46, groups:  Genotype, 3

Fixed effects:
                         Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)              0.939828   0.103867  2.456396   9.048  0.00604 ** 
OriginTransplant        -0.005543   0.054370 40.013465  -0.102  0.91931    
SiteSS                   0.335684   0.053119 40.006608   6.319 1.68e-07 ***
OriginTransplant:SiteSS  0.049977   0.076810 40.006608   0.651  0.51899    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) OrgnTr SiteSS
OrgnTrnspln -0.250              
SiteSS      -0.256  0.489       
OrgnTrn:SSS  0.177 -0.706 -0.692
eta_squared(Chl.lme_TP4)
# Effect Size for ANOVA (Type III)

Parameter   | Eta2 (partial) |       95% CI
-------------------------------------------
Origin      |       6.34e-03 | [0.00, 1.00]
Site        |           0.69 | [0.55, 1.00]
Origin:Site |           0.01 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save model results
Chl_TP4.res<-data.frame(summary(Chl.lme_TP4)$coefficients[-1,])
Chl_TP4.res$Predictor<-c("Origin", "Site", "Origin x Site")
Chl_TP4.res$EtaSq<-c(eta_squared(Chl.lme_TP4)$Eta2)
Chl_TP4.res$Response<-rep("Chlorophyll", nrow(Chl_TP4.res))

Effect size of Origin for each Site


##KL
Chl.lme_TP4_KL<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="KL"),])
summary(Chl.lme_TP4_KL)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "KL"), ]

REML criterion at convergence: -14

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.59344 -0.58861 -0.05038  0.48137  1.88220 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.01194  0.1093  
 Residual             0.02028  0.1424  
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                  Estimate Std. Error        df t value Pr(>|t|)   
(Intercept)       0.939828   0.075300  2.739672  12.481  0.00171 **
OriginTransplant -0.005243   0.059554 19.055343  -0.088  0.93076   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.377
eta_squared(Chl.lme_TP4_KL)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |       4.07e-04 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##SS
Chl.lme_TP4_SS<-lmer(log(Chl_ug.cm2+1)~Origin+(1|Genotype), data=Coral.TP4[which(Coral.TP4$Site=="SS"),])
summary(Chl.lme_TP4_SS)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: log(Chl_ug.cm2 + 1) ~ Origin + (1 | Genotype)
   Data: Coral.TP4[which(Coral.TP4$Site == "SS"), ]

REML criterion at convergence: -25

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.80744 -0.47238  0.03677  0.58308  1.31155 

Random effects:
 Groups   Name        Variance Std.Dev.
 Genotype (Intercept) 0.049098 0.22158 
 Residual             0.009964 0.09982 
Number of obs: 23, groups:  Genotype, 3

Fixed effects:
                 Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)       1.27551    0.13113  2.09990   9.727  0.00885 **
OriginTransplant  0.04346    0.04175 19.00925   1.041  0.31096   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr)
OrgnTrnspln -0.152
eta_squared(Chl.lme_TP4_SS)
# Effect Size for ANOVA (Type III)

Parameter | Eta2 (partial) |       95% CI
-----------------------------------------
Origin    |           0.05 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].
##Save results
Chl_TP4.site.res<-data.frame(rbind(summary(Chl.lme_TP4_KL)$coefficients[-1,],
                                     summary(Chl.lme_TP4_SS)$coefficients[-1,]))
Chl_TP4.site.res$Predictor<-c("KL Origin", "SS Origin")
Chl_TP4.site.res$EtaSq<-c(eta_squared(Chl.lme_TP4_KL)$Eta2, eta_squared(Chl.lme_TP4_SS)$Eta2)
Chl_TP4.site.res$Response<-rep("Chlorophyll", nrow(Chl_TP4.site.res))

##Combine results 
Chl_TP4.res<-rbind(Chl_TP4.res, Chl_TP4.site.res)
##Summary statistics by Site and Origin
TP4_Chl.sum<-summarySE(Coral.TP4, measurevar="Chl_ug.cm2", groupvars=c("Site", "Origin", "Site.Orig"), na.rm=TRUE)

##Plot Average Chlorophyll across Treatments
TP4_Chl.plot<-ggplot(TP4_Chl.sum, aes(x=Site, y=Chl_ug.cm2, colour=Site.Orig)) + 
  scale_colour_manual(values=Orig.colors.o)+
  geom_errorbar(aes(ymin=Chl_ug.cm2-se, ymax=Chl_ug.cm2+se), width=cap.sz, linewidth=bar.sz, position=position_dodge(width=0.5)) +
  geom_point(size=point.sz, position=position_dodge(width=0.5))+
  theme_classic()+
  theme(axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"), 
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position="top")+
  labs(x="Site and Origin", y=expression(paste('Total Chlorophyll (\u03BCg cm'^-2*")")), colour=NULL)+
  ylim(0.5, 3.25); TP4_Chl.plot

Save Results

##Combine Results
Phys_T4.res<-rbind(Prot.C_TP4.res, Prot.S_TP4.res, Bio.C_TP4.res, Bio.S_TP4.res, Chl_TP4.res)

##Add Timepoint
Phys_T4.res$TimeP<-rep("TP4", nrow(Phys_T4.res))

Effect Size over Time

##Dataframe of effect size results
Phys.ES<-rbind(Phys_T1.res, Phys_T2.res, Phys_T3.res, Phys_T4.res)
Phys.ES<-Phys.ES %>% dplyr::rename(p = Pr...t..)
Phys.ES<-Phys.ES[,c("TimeP", "Predictor", "Response", "EtaSq", "p")]

##Site specific results
Phys.ES<-Phys.ES[which(Phys.ES$Predictor=="KL Origin" | Phys.ES$Predictor=="SS Origin"),]
Phys.ES<-Phys.ES %>% separate_wider_delim(cols="Predictor", delim=" ", names=c("Site", "Predictor"), cols_remove = TRUE)

##Add Metric names
Phys.ES$Metric<-ifelse(Phys.ES$Response== "Protein Host", "TP_ug.cm2_C", ifelse(
  Phys.ES$Response== "Protein Symbiont", "TP_ug.cm2_S", ifelse(
    Phys.ES$Response=="Biomass Host", "AFDW_mg.cm2_C", ifelse(
      Phys.ES$Response=="Biomass Symbiont", "AFDW_mg.cm2_S", ifelse(
        Phys.ES$Response=="Chlorophyll", "Chl_ug.cm2", NA)))))

##Add Significance levels
Phys.ES$Sig<-ifelse(Phys.ES$p<0.001, "***", ifelse(Phys.ES$p<0.01, "**", 
            ifelse(Phys.ES$p<0.05, "*", ifelse(Phys.ES$p<0.1, "-", NA))))

Host Biomass

Bio.C.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_C"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Host Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.C.ES.plot

Symbiont Biomass

Bio.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="AFDW_mg.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Biomass")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Bio.S.ES.plot

Symbiont Protein

Prot.S.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="TP_ug.cm2_S"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Symbiont Protein")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Prot.S.ES.plot

Chlorophyll

Chl.ES.plot<-ggplot(Phys.ES[which(Phys.ES$Metric=="Chl_ug.cm2"),], aes(x=TimeP, y=EtaSq, fill=Site))+
  geom_bar(stat="identity", position=position_dodge())+
    scale_fill_manual(values=Site.colors.o)+
theme_classic()+
  ggtitle("Chlorophyll")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, hjust=0.5), 
        axis.title.x = element_text(size = axis.title.sz), 
        axis.title.y = element_text(size = axis.title.sz), 
        axis.text.x=element_text(size=axis.txt.sz, colour="black"),
        axis.text.y=element_text(size=axis.txt.sz, colour="black"),
        legend.text=element_text(size=leg.txt.sz), 
        legend.title=element_text(size=leg.title.sz), 
        legend.box.background = element_rect(color = "black"), 
        legend.position=c(.9, .8))+
   labs(x="Time Point", y=expression(paste("Origin Effect Size (p", eta^2, ")")), colour="Site")+
  ylim(0, 0.6)+
  geom_text(aes(label=Sig), vjust=-0.02, color="black", position=position_dodge(0.9), size=levels.sz, fontface="bold"); Chl.ES.plot

Figures

Figure 3 Univariate Physiology

Adjust for Panel

##Biomass Host
TP1_BioHost.plot<-TP1_BioHost.plot+ ggtitle("TP1")+ labs(x="")+
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position=c(0.5, 0.85), legend.direction="horizontal")+
  guides(color=guide_legend(nrow=2, byrow=FALSE)) 

TP2_BioHost.plot<-TP2_BioHost.plot+ ggtitle("TP2")+ labs(x="", y="") +
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position="none")

TP3_BioHost.plot<-TP3_BioHost.plot+ ggtitle("TP3")+ labs(x="", y="") +
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position="none")

TP4_BioHost.plot<-TP4_BioHost.plot+ ggtitle("TP4")+ labs(x="", y="") +
  theme(plot.title = element_text(colour="black", size=panel.lab.sz, face="bold", hjust=0.5), 
        legend.position="none")

Bio.C.ES.plot<-Bio.C.ES.plot + labs(x="") + theme(legend.position=c(.15, .8))

##Biomass Symbiont
TP1_BioSym.plot<-TP1_BioSym.plot + labs(x="") + theme(legend.position="none")

TP2_BioSym.plot<-TP2_BioSym.plot + labs(x="", y="") + theme(legend.position="none")

TP3_BioSym.plot<-TP3_BioSym.plot + labs(x="", y="") + theme(legend.position="none")

TP4_BioSym.plot<-TP4_BioSym.plot + labs(x="", y="") + theme(legend.position="none")

Bio.S.ES.plot<-Bio.S.ES.plot + labs(x="") + theme(legend.position="none") 

##Protein Symbiont
TP1_ProtSym.plot<-TP1_ProtSym.plot + labs(x="") + theme(legend.position="none")

TP2_ProtSym.plot<-TP2_ProtSym.plot + labs(x="", y="") + theme(legend.position="none")

TP3_ProtSym.plot<-TP3_ProtSym.plot + labs(x="", y="") + theme(legend.position="none")

TP4_ProtSym.plot<-TP4_ProtSym.plot + labs(x="", y="") + theme(legend.position="none")

Prot.S.ES.plot<-Prot.S.ES.plot + labs(x="") + theme(legend.position="none") 

##Chlorophyll
TP1_Chl.plot<-TP1_Chl.plot + theme(legend.position="none")

TP2_Chl.plot<-TP2_Chl.plot + labs(y="") + theme(legend.position="none")

TP3_Chl.plot<-TP3_Chl.plot + labs(y="") + theme(legend.position="none")

TP4_Chl.plot<-TP4_Chl.plot + labs(y="") + theme(legend.position="none")

Chl.ES.plot<-Chl.ES.plot + theme(legend.position="none")

Figure 3

##Create Panel
Phys_fig<-plot_grid(TP1_BioHost.plot, TP2_BioHost.plot, 
                      TP3_BioHost.plot, TP4_BioHost.plot, Bio.C.ES.plot, 
                      TP1_BioSym.plot, TP2_BioSym.plot, 
                      TP3_BioSym.plot, TP4_BioSym.plot, Bio.S.ES.plot, 
                      TP1_ProtSym.plot, TP2_ProtSym.plot, 
                      TP3_ProtSym.plot, TP4_ProtSym.plot, Prot.S.ES.plot, 
                      TP1_Chl.plot, TP2_Chl.plot, 
                      TP3_Chl.plot, TP4_Chl.plot, Chl.ES.plot,
                    rel_widths=c(0.8, 0.8, 0.8, 0.8, 1), rel_heights = 1,
                    nrow=4, ncol=5, byrow=T, labels = NULL)
Warning: Removed 5 rows containing missing values (`geom_text()`).Warning: Removed 6 rows containing missing values (`geom_text()`).Warning: Removed 7 rows containing missing values (`geom_text()`).Warning: Removed 4 rows containing missing values (`geom_text()`).
##Save Figure
ggsave(filename="Figures/02_Physiology/Fig3_Physiology.png", plot=Phys_fig, dpi=300, width=16, height=16, units="in")

Tables

Table S3A Physiology PERMANOVA and PERMDISP

##Combine Results Tables
TableS3A_Phys.PERM<-data.frame(rbind(PERM_T1.res, PERM_T2.res, PERM_T3.res, PERM_T4.res))

##Organize
names(TableS3A_Phys.PERM)
[1] "Df"         "SumOfSqs"   "F"          "parOmegaSq" "Pr..F."     "Predictor"  "p_DISP"    
[8] "Timepoint" 
TableS3A_Phys.PERM<-TableS3A_Phys.PERM %>% dplyr::rename( DF = Df, SS = SumOfSqs, EffectSize = parOmegaSq, p = Pr..F.)
TableS3A_Phys.PERM<-TableS3A_Phys.PERM[,c("Timepoint", "Predictor", "DF", "SS", "F",   "EffectSize", "p", "p_DISP")]

#Round to 3 digits
TableS3A_Phys.PERM$SS<-round(TableS3A_Phys.PERM$SS, 3)
TableS3A_Phys.PERM$F<-round(TableS3A_Phys.PERM$F, 3)
TableS3A_Phys.PERM$EffectSize<-round(TableS3A_Phys.PERM$EffectSize, 3)
TableS3A_Phys.PERM$p<-round(TableS3A_Phys.PERM$p, 3)
TableS3A_Phys.PERM$p_DISP<-round(TableS3A_Phys.PERM$p_DISP, 3)

##Write Out Table
write.csv(TableS3A_Phys.PERM, "Tables/TableS3A_Physiology_PERM_Results.csv", row.names=FALSE)

Table S4 Physiology Univariate LM

##Combine Results Tables
TableS4_Phys.LM<-data.frame(rbind(Phys_T1.res, Phys_T2.res, Phys_T3.res, Phys_T4.res))

##Organize
names(TableS4_Phys.LM)
[1] "Estimate"   "Std..Error" "df"         "t.value"    "Pr...t.."   "Predictor"  "EtaSq"     
[8] "Response"   "TimeP"     
TableS4_Phys.LM<-TableS4_Phys.LM %>% dplyr::rename(SE = Std..Error, DF = df, t = t.value, p = Pr...t.., EffectSize = EtaSq, Timepoint = TimeP)
TableS4_Phys.LM<-TableS4_Phys.LM[,c("Timepoint", "Response", "Predictor", "Estimate", "SE", "DF", "t", "p", "EffectSize")]

#Round to 3 digits
TableS4_Phys.LM$Estimate<-round(TableS4_Phys.LM$Estimate, 3)
TableS4_Phys.LM$SE<-round(TableS4_Phys.LM$SE, 3)
TableS4_Phys.LM$t<-round(TableS4_Phys.LM$t, 3)
TableS4_Phys.LM$p<-round(TableS4_Phys.LM$p, 3)
TableS4_Phys.LM$EffectSize<-round(TableS4_Phys.LM$EffectSize, 3)

#Integer
TableS4_Phys.LM$DF<-round(TableS4_Phys.LM$DF, 0)

##Write Out Table
write.csv(TableS4_Phys.LM, "Tables/TableS4_Physiology_LM_Results.csv", row.names=FALSE)
LS0tDQp0aXRsZTogIkNvcmFsIFBoeXNpb2xvZ3kgRm9sbG93aW5nIFJlY2lwcm9jYWwgVHJhbnNwbGFudCINCmF1dGhvcjogIlNlcmVuYSBIYWNrZXJvdHQiDQpkYXRlOiAiMS8xLzIwMjQiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KIyBTZXR1cA0KDQpgYGB7ciBTZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQoNCiMjIyBMb2FkIFBhY2thZ2VzDQpgYGB7cn0NCiMjSW5zdGFsbCBQYWNrYWdlcyBpZiBOZWVkZWQNCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCmlmICghcmVxdWlyZSgiY293cGxvdCIpKSBpbnN0YWxsLnBhY2thZ2VzKCJjb3dwbG90IikNCmlmICghcmVxdWlyZSgiUm1pc2MiKSkgaW5zdGFsbC5wYWNrYWdlcygiUm1pc2MiKQ0KaWYgKCFyZXF1aXJlKCJsbWU0IikpIGluc3RhbGwucGFja2FnZXMoImxtZTQiKQ0KaWYgKCFyZXF1aXJlKCJsbWVyVGVzdCIpKSBpbnN0YWxsLnBhY2thZ2VzKCJsbWVyVGVzdCIpDQppZiAoIXJlcXVpcmUoInZlZ2FuIikpIGluc3RhbGwucGFja2FnZXMoInZlZ2FuIikNCmlmICghcmVxdWlyZSgiY29ycnBsb3QiKSkgaW5zdGFsbC5wYWNrYWdlcygiY29ycnBsb3QiKQ0KaWYgKCFyZXF1aXJlKCJESEFSTWEiKSkgaW5zdGFsbC5wYWNrYWdlcygiREhBUk1hIikNCmlmICghcmVxdWlyZSgiZWZmZWN0c2l6ZSIpKSBpbnN0YWxsLnBhY2thZ2VzKCJlZmZlY3RzaXplIikNCmlmICghcmVxdWlyZSgiZW1tZWFucyIpKSBpbnN0YWxsLnBhY2thZ2VzKCJlbW1lYW5zIikNCmlmICghcmVxdWlyZSgiSG1pc2MiKSkgaW5zdGFsbC5wYWNrYWdlcygiSG1pc2MiKQ0KaWYgKCFyZXF1aXJlKCJkcGx5ciIpKSBpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpDQppZiAoIXJlcXVpcmUoInRpZHlyIikpIGluc3RhbGwucGFja2FnZXMoInRpZHlyIikNCg0KIyNMb2FkIFBhY2thZ2VzDQpsaWJyYXJ5KGdncGxvdDIpICNSZXF1aXJlZCBmb3IgZ2dwbG90cw0KbGlicmFyeShjb3dwbG90KSAjUmVxdWlyZWQgZm9yIHBsb3R0aW5nIHBhbmVsIGZpZ3VyZXMNCmxpYnJhcnkoUm1pc2MpICNSZXF1aXJlZCBmb3IgU3VtbWFyeVNFIGZ1bmN0aW9uDQpsaWJyYXJ5KGxtZTQpICNSZXF1aXJlZCBmb3IgbWl4ZWQgZWZmZWN0cyBtb2RlbGluZw0KbGlicmFyeShsbWVyVGVzdCkgI1JlcXVpcmVkIGZvciBwIHZhbHVlcyB3aXRoIGxtZTQgbW9kZWwgc3VtbWFyaWVzDQpsaWJyYXJ5KHZlZ2FuKSAjUmVxdWlyZWQgZm9yIG11bHRpdmFyaWF0ZSBhbmFseXNpcyBQRVJNDQpsaWJyYXJ5KGNvcnJwbG90KSAjUmVxdWlyZWQgZm9yIGNvcnJlbGF0aW9uIHBsb3QNCmxpYnJhcnkoREhBUk1hKSAjUmVxdWlyZWQgdG8gY2hlY2sgcmVzaWR1YWxzIG9mIG1peGVkIGVmZmVjdHMgbW9kZWxzDQpsaWJyYXJ5KGVmZmVjdHNpemUpICNSZXF1aXJlZCBmb3IgZXRhX3NxdWFyZWQgZWZmZWN0IHNpemVzDQpsaWJyYXJ5KGVtbWVhbnMpICNSZXF1aXJlZCBmb3IgcGFpcndpc2UgY29tcGFyaXNvbnMgDQpsaWJyYXJ5KEhtaXNjKSAjUmVxdWlyZWQgZm9yIGNvcnJlbGF0aW9ucw0KbGlicmFyeShkcGx5cikgI1JlcXVpcmVkIGZvciBkYXRhZnJhbWUgb3JnYW5pemF0aW9uDQpsaWJyYXJ5KHRpZHlyKSAjUmVxdWlyZWQgZm9yIGRhdGFmcmFtZSBvcmdhbml6YXRpb24NCg0KYGBgDQoNCg0KIyMjIEdyYXBoaW5nIFBhcmFtZXRlcnMNCmBgYHtyfQ0KI05vdGU6IFJ1biAiR3JhcGhpbmcgUGFyYW1ldGVycyIgc2VjdGlvbiBmcm9tIDAxX0V4cGVyaW1lbnRhbFNldHVwLlJtZCBmaWxlDQpgYGANCg0KDQojIFNhbXBsZSBEYXRhIGFuZCBNZXRhZGF0YQ0KDQojIyMgTG9hZCBhbmQgT3JnYW5pemUgRGF0YQ0KYGBge3J9DQojI0xvYWQgRGF0YQ0KI05vdGU6IFBoeXNpb2xvZ2ljYWwgbWV0cmljcyBjYWxjdWxhdGVkIGluIDAyX1BoeXNpb2xvZ3lNZXRyaWNzLlIgZmlsZQ0KQ29yYWw8LXJlYWQuY3N2KCJPdXRwdXRzL0NvcmFsRGF0YS5jc3YiLCBoZWFkZXI9VFJVRSkNCg0KIyNTZXQgZmFjdG9yIHZhcmlhYmxlcw0KQ29yYWwkVGltZVA8LWZhY3RvcihDb3JhbCRUaW1lUCwgbGV2ZWxzPWMoIlRQMSIsICJUUDIiLCAiVFAzIiwgIlRQNCIpKQ0KQ29yYWwkU2l0ZTwtZmFjdG9yKENvcmFsJFNpdGUsIGxldmVscz1jKCJLTCIsICJTUyIpKQ0KQ29yYWwkR2Vub3R5cGU8LWZhY3RvcihDb3JhbCRHZW5vdHlwZSwgbGV2ZWxzPWMoIkFDOCIsICJBQzEwIiwgIkFDMTIiKSkNCkNvcmFsJE9yaWc8LWZhY3RvcihDb3JhbCRPcmlnLCBsZXZlbHM9YygiTiIsICJUIikpDQpDb3JhbCRPcmlnaW48LWZhY3RvcihDb3JhbCRPcmlnaW4sIGxldmVscz1jKCJOYXRpdmUiLCAiVHJhbnNwbGFudCIpKQ0KQ29yYWwkU2l0ZS5PcmlnPC1mYWN0b3IoQ29yYWwkU2l0ZS5PcmlnLCBsZXZlbHM9YygiS0wuTiIsICJLTC5UIiwgIlNTLk4iLCAiU1MuVCIpKQ0KDQoNCmBgYA0KDQoNCiMgTXVsdGl2YXJpYXRlIEFuYWx5c2lzDQoNCiMjIyBhZG9uaXMgT21lZ2FTcSBGdW5jdGlvbg0KYGBge3J9DQojJyBDYWxjdWxhdGUgKHBhcnRpYWwpIE9tZWdhLXNxdWFyZWQgKGVmZmVjdC1zaXplIGNhbGN1bGF0aW9uKSBmb3IgUEVSTUFOT1ZBIGFuZCBhZGQgaXQgdG8gdGhlIGlucHV0IG9iamVjdA0KIycNCiMnIEBwYXJhbSBhZG9uaXNPdXRwdXQgQW4gYWRvbmlzIG9iamVjdA0KIycgQHBhcmFtIHBhcnRpYWwgU2hvdWxkIHBhcnRpYWwgb21lZ2Etc3F1YXJlZCBiZSBjYWxjdWxhdGVkIChzYW1wbGUgc2l6ZSBhZGp1c3RlZCkuIERlZmF1bHQgVFJVRQ0KIycgQHJldHVybiBPcmlnaW5hbCBhZG9uaXMgb2JqZWN0IHdpdGggdGhlIChwYXJ0aWFsKSBPbWVnYS1zcXVhcmVkIHZhbHVlcyBhZGRlZA0KIycgQGltcG9ydCB2ZWdhbg0KIycgQGV4cG9ydA0KYWRvbmlzX09tZWdhU3EgPC0gZnVuY3Rpb24oYWRvbmlzT3V0cHV0LCBwYXJ0aWFsID0gVFJVRSl7DQogICAgaWYoIShpcyhhZG9uaXNPdXRwdXQsICJhZG9uaXMiKSB8fCBpcyhhZG9uaXNPdXRwdXQsICJhbm92YS5jY2EiKSkpDQogICAgICAgIHN0b3AoIklucHV0IHNob3VsZCBiZSBhbiBhZG9uaXMgb2JqZWN0IikNCiAgICBpZiAoaXMoYWRvbmlzT3V0cHV0LCAiYW5vdmEuY2NhIikpIHsNCiAgICAgICAgYW92X3RhYiA8LSBhZG9uaXNPdXRwdXQNCiAgICAgICAgYW92X3RhYiRNZWFuU3FzIDwtIGFvdl90YWIkU3VtT2ZTcXMgLyBhb3ZfdGFiJERmDQogICAgICAgIGFvdl90YWIkTWVhblNxc1tsZW5ndGgoYW92X3RhYiREZildIDwtIE5BDQogICAgfSBlbHNlIHsNCiAgICAgICAgYW92X3RhYiA8LSBhZG9uaXNPdXRwdXQkYW92LnRhYg0KICAgIH0NCiAgICBoZWFkaW5nIDwtIGF0dHIoYW92X3RhYiwgImhlYWRpbmciKQ0KICAgIE1TX3JlcyA8LSBhb3ZfdGFiW3BtYXRjaCgiUmVzaWR1YWwiLCByb3duYW1lcyhhb3ZfdGFiKSksICJNZWFuU3FzIl0NCiAgICBTU190b3QgPC0gYW92X3RhYltyb3duYW1lcyhhb3ZfdGFiKSA9PSAiVG90YWwiLCAiU3Vtc09mU3FzIl0NCiAgICBOIDwtIGFvdl90YWJbcm93bmFtZXMoYW92X3RhYikgPT0gIlRvdGFsIiwgIkRmIl0gKyAxDQogICAgaWYocGFydGlhbCl7DQogICAgICAgIG9tZWdhIDwtIGFwcGx5KGFvdl90YWIsIDEsIGZ1bmN0aW9uKHgpICh4WyJEZiJdKih4WyJNZWFuU3FzIl0tTVNfcmVzKSkvKHhbIkRmIl0qeFsiTWVhblNxcyJdKyhOLXhbIkRmIl0pKk1TX3JlcykpDQogICAgICAgIGFvdl90YWIkcGFyT21lZ2FTcSA8LSBjKG9tZWdhWzE6KGxlbmd0aChvbWVnYSktMildLCBOQSwgTkEpDQogICAgfSBlbHNlIHsNCiAgICAgICAgb21lZ2EgPC0gYXBwbHkoYW92X3RhYiwgMSwgZnVuY3Rpb24oeCkgKHhbIlN1bXNPZlNxcyJdLXhbIkRmIl0qTVNfcmVzKS8oU1NfdG90K01TX3JlcykpDQogICAgICAgIGFvdl90YWIkT21lZ2FTcSA8LSBjKG9tZWdhWzE6KGxlbmd0aChvbWVnYSktMildLCBOQSwgTkEpDQogICAgfQ0KICAgIGlmIChpcyhhZG9uaXNPdXRwdXQsICJhZG9uaXMiKSkNCiAgICAgICAgY25fb3JkZXIgPC0gYygiRGYiLCAiU3Vtc09mU3FzIiwgIk1lYW5TcXMiLCAiRi5Nb2RlbCIsICJSMiIsDQogICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpYWwpICJwYXJPbWVnYVNxIiBlbHNlICJPbWVnYVNxIiwgIlByKD5GKSIpDQogICAgZWxzZQ0KICAgICAgICBjbl9vcmRlciA8LSBjKCJEZiIsICJTdW1PZlNxcyIsICJGIiwgaWYgKHBhcnRpYWwpICJwYXJPbWVnYVNxIiBlbHNlICJPbWVnYVNxIiwNCiAgICAgICAgICAgICAgICAgICAgICAiUHIoPkYpIikNCiAgICBhb3ZfdGFiIDwtIGFvdl90YWJbLCBjbl9vcmRlcl0NCiAgICBhdHRyKGFvdl90YWIsICJuYW1lcyIpIDwtIGNuX29yZGVyDQogICAgYXR0cihhb3ZfdGFiLCAiaGVhZGluZyIpIDwtIGhlYWRpbmcNCiAgICBpZiAoaXMoYWRvbmlzT3V0cHV0LCAiYWRvbmlzIikpDQogICAgICAgIGFkb25pc091dHB1dCRhb3YudGFiIDwtIGFvdl90YWINCiAgICBlbHNlDQogICAgICAgIGFkb25pc091dHB1dCA8LSBhb3ZfdGFiDQogICAgcmV0dXJuKGFkb25pc091dHB1dCkNCn0NCmBgYA0KDQoNCiMjIyBDaGVjayBDb3JyZWxhdGlvbg0KYGBge3J9DQojI1JlbW92ZSBOQSdzDQpuYW1lcyhDb3JhbCkNCkNvcmFsLnJtPC1uYS5vbWl0KENvcmFsKQ0KDQojI0xvZyArMSB0cmFuc2Zvcm0gDQpDb3JhbC5sb2c8LUNvcmFsLnJtDQpDb3JhbC5sb2dbLC1jKDE6MTApXTwtbG9nKENvcmFsLnJtWywtYygxOjEwKV0rMSkNCiAgDQpQaHlzLmNvcjwtcmNvcnIoYXMubWF0cml4KENvcmFsLmxvZ1ssLWMoMToxMCldKSwgdHlwZT0icGVhcnNvbiIpDQpQaHlzLmNvcg0KDQpkaWFnKFBoeXMuY29yJFApPC0wDQoNCmNvcnJwbG90KFBoeXMuY29yJHIsIHR5cGU9InVwcGVyIiwgb3JkZXI9ImhjbHVzdCIsIA0KICAgICAgICAgcC5tYXQgPSBQaHlzLmNvciRQLCBzaWcubGV2ZWwgPSAwLjAxLCBpbnNpZyA9ICJibGFuayIpDQoNCmBgYA0KDQoNCiMjIyBUUDENCmBgYHtyfQ0KIyNTdWJzZXQgVGltZXBvaW50IDEgDQpDb3JhbC5sb2dfVFAxPC1zdWJzZXQoQ29yYWwubG9nLCBUaW1lUD09IlRQMSIpDQoNCmBgYA0KDQojIyMjIFBFUk1BTk9WQQ0KYGBge3J9DQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAxLnBlcm08LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAxWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDEkT3JpZ2luICogQ29yYWwubG9nX1RQMSRTaXRlLCBkYXRhPUNvcmFsLmxvZ19UUDEsIHN0cmF0YT1Db3JhbC5sb2dfVFAxJEdlbm90eXBlLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQMS5wZXJtKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDEuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMVssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAxJE9yaWdpbikpDQpUUDEuZGlzcF9vcmlnDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBTaXRlDQpUUDEuZGlzcF9zaXRlPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMVssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAxJFNpdGUpKQ0KVFAxLmRpc3Bfc2l0ZQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luOlNpdGUNClRQMS5kaXNwX29zPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMVssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAxJE9yaWdpbjpDb3JhbC5sb2dfVFAxJFNpdGUpKQ0KVFAxLmRpc3Bfb3MNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDEucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMS5wZXJtKVsxOjMsXSkNClBFUk1fVDEucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQRVJNX1QxLnJlcyRwX0RJU1A8LWMoVFAxLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFAxLmRpc3Bfc2l0ZSRgUHIoPkYpYFsxXSwgVFAxLmRpc3Bfb3MkYFByKD5GKWBbMV0pDQpgYGANClBoeXNpb2xvZ3kgZGlmZmVycyBzaWduaWZpY2FudGx5IGJ5IE9yaWdpbiBhbmQgdGhlIGVmZmVjdCBvZiBPcmlnaW4gZGlmZmVycyBiZXR3ZWVuIFNpdGVzLg0KDQojIyMjIEVmZmVjdCBTaXplDQpDYWxjdWxhdGUgRWZmZWN0IFNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KIyNQRVJNQU5PVkENCkNvcmFsLlRQMS5wZXJtX0tMPC1hZG9uaXMyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMVt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJLTCIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKX4gQ29yYWwubG9nX1RQMSRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iS0wiKV0sIGRhdGE9Q29yYWwubG9nX1RQMVt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJLTCIpLF0sIHN0cmF0YT1Db3JhbC5sb2dfVFAxJEdlbm90eXBlW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IktMIildLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQMS5wZXJtX0tMKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDEuS0wuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMVt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJLTCIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQMSRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iS0wiKV0pKQ0KVFAxLktMLmRpc3Bfb3JpZw0KDQojI1NTDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAxLnBlcm1fU1M8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAxW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IlNTIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFAxJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJTUyIpXSwgZGF0YT1Db3JhbC5sb2dfVFAxW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IlNTIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDEkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQMSRTaXRlPT0iU1MiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAxLnBlcm1fU1MpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMS5TUy5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAxW3doaWNoKENvcmFsLmxvZ19UUDEkU2l0ZT09IlNTIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAxJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAxJFNpdGU9PSJTUyIpXSkpDQpUUDEuU1MuZGlzcF9vcmlnDQoNCiMjU2F2ZSByZXN1bHRzDQpQRVJNX1QxLnNpdGUucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMS5wZXJtX0tMKVsxLF0pDQpQRVJNX1QxLnNpdGUucmVzPC1yYmluZChQRVJNX1QxLnNpdGUucmVzLCBkYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMS5wZXJtX1NTKVsxLF0pKQ0KUEVSTV9UMS5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KUEVSTV9UMS5zaXRlLnJlcyRwX0RJU1A8LWMoVFAxLktMLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFAxLlNTLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpQRVJNX1QxLnJlczwtcmJpbmQoUEVSTV9UMS5yZXMsIFBFUk1fVDEuc2l0ZS5yZXMpDQpQRVJNX1QxLnJlcyRUaW1lcG9pbnQ8LXJlcCgiVFAxIiwgbnJvdyhQRVJNX1QxLnJlcykpDQoNCmBgYA0KDQojIyMgVFAyDQpgYGB7cn0NCiMjU3Vic2V0IFRpbWVwb2ludCAyIA0KQ29yYWwubG9nX1RQMjwtc3Vic2V0KENvcmFsLmxvZywgVGltZVA9PSJUUDIiKQ0KDQpgYGANCg0KIyMjIyBQRVJNQU5PVkENCmBgYHtyfQ0KIyNQRVJNQU5PVkENCkNvcmFsLlRQMi5wZXJtPC1hZG9uaXMyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMlssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFAyJE9yaWdpbiAqIENvcmFsLmxvZ19UUDIkU2l0ZSwgZGF0YT1Db3JhbC5sb2dfVFAyLCBzdHJhdGE9Q29yYWwubG9nX1RQMiRHZW5vdHlwZSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDIucGVybSkNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFAyLmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDJbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQMiRPcmlnaW4pKQ0KVFAyLmRpc3Bfb3JpZw0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgU2l0ZQ0KVFAyLmRpc3Bfc2l0ZTwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDJbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQMiRTaXRlKSkNClRQMi5kaXNwX3NpdGUNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbjpTaXRlDQpUUDIuZGlzcF9vczwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDJbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQMiRPcmlnaW46Q29yYWwubG9nX1RQMiRTaXRlKSkNClRQMi5kaXNwX29zDQoNCiMjU2F2ZSByZXN1bHRzDQpQRVJNX1QyLnJlczwtZGF0YS5mcmFtZShhZG9uaXNfT21lZ2FTcShDb3JhbC5UUDIucGVybSlbMTozLF0pDQpQRVJNX1QyLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KUEVSTV9UMi5yZXMkcF9ESVNQPC1jKFRQMi5kaXNwX29yaWckYFByKD5GKWBbMV0sIFRQMi5kaXNwX3NpdGUkYFByKD5GKWBbMV0sIFRQMi5kaXNwX29zJGBQcig+RilgWzFdKQ0KDQpgYGANCg0KDQojIyMjIEVmZmVjdCBTaXplDQpDYWxjdWxhdGUgRWZmZWN0IFNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KIyNQRVJNQU5PVkENCkNvcmFsLlRQMi5wZXJtX0tMPC1hZG9uaXMyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMlt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJLTCIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKX4gQ29yYWwubG9nX1RQMiRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iS0wiKV0sIGRhdGE9Q29yYWwubG9nX1RQMlt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJLTCIpLF0sIHN0cmF0YT1Db3JhbC5sb2dfVFAyJEdlbm90eXBlW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IktMIildLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQMi5wZXJtX0tMKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDIuS0wuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQMlt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJLTCIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQMiRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iS0wiKV0pKQ0KVFAyLktMLmRpc3Bfb3JpZw0KDQojI1NTDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAyLnBlcm1fU1M8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAyW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IlNTIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFAyJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJTUyIpXSwgZGF0YT1Db3JhbC5sb2dfVFAyW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IlNTIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDIkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQMiRTaXRlPT0iU1MiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAyLnBlcm1fU1MpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMi5TUy5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAyW3doaWNoKENvcmFsLmxvZ19UUDIkU2l0ZT09IlNTIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAyJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAyJFNpdGU9PSJTUyIpXSkpDQpUUDIuU1MuZGlzcF9vcmlnDQoNCiMjU2F2ZSByZXN1bHRzDQpQRVJNX1QyLnNpdGUucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMi5wZXJtX0tMKVsxLF0pDQpQRVJNX1QyLnNpdGUucmVzPC1yYmluZChQRVJNX1QyLnNpdGUucmVzLCBkYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMi5wZXJtX1NTKVsxLF0pKQ0KUEVSTV9UMi5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KUEVSTV9UMi5zaXRlLnJlcyRwX0RJU1A8LWMoVFAyLktMLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFAyLlNTLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpQRVJNX1QyLnJlczwtcmJpbmQoUEVSTV9UMi5yZXMsIFBFUk1fVDIuc2l0ZS5yZXMpDQpQRVJNX1QyLnJlcyRUaW1lcG9pbnQ8LXJlcCgiVFAyIiwgbnJvdyhQRVJNX1QyLnJlcykpDQoNCmBgYA0KDQoNCiMjIyBUUDMNCmBgYHtyfQ0KIyNTdWJzZXQgVGltZXBvaW50IDMgDQpDb3JhbC5sb2dfVFAzPC1zdWJzZXQoQ29yYWwubG9nLCBUaW1lUD09IlRQMyIpDQoNCmBgYA0KDQojIyMjIFBFUk1BTk9WQQ0KYGBge3J9DQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAzLnBlcm08LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAzWyxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDMkT3JpZ2luICogQ29yYWwubG9nX1RQMyRTaXRlLCBkYXRhPUNvcmFsLmxvZ19UUDMsIHN0cmF0YT1Db3JhbC5sb2dfVFAzJEdlbm90eXBlLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQMy5wZXJtKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDMuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQM1ssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJE9yaWdpbikpDQpUUDMuZGlzcF9vcmlnDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBTaXRlDQpUUDMuZGlzcF9zaXRlPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQM1ssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJFNpdGUpKQ0KVFAzLmRpc3Bfc2l0ZQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luOlNpdGUNClRQMy5kaXNwX29zPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQM1ssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJE9yaWdpbjpDb3JhbC5sb2dfVFAzJFNpdGUpKQ0KVFAzLmRpc3Bfb3MNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDMucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQMy5wZXJtKVsxOjMsXSkNClBFUk1fVDMucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpQRVJNX1QzLnJlcyRwX0RJU1A8LWMoVFAzLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFAzLmRpc3Bfc2l0ZSRgUHIoPkYpYFsxXSwgVFAzLmRpc3Bfb3MkYFByKD5GKWBbMV0pDQoNCmBgYA0KDQoNCiMjIyMgRWZmZWN0IFNpemUNCkNhbGN1bGF0ZSBFZmZlY3QgU2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFAzLnBlcm1fS0w8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFAzW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFAzJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAzJFNpdGU9PSJLTCIpXSwgZGF0YT1Db3JhbC5sb2dfVFAzW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IktMIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDMkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iS0wiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAzLnBlcm1fS0wpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQMy5LTC5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFAzW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IktMIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFAzJE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFAzJFNpdGU9PSJLTCIpXSkpDQpUUDMuS0wuZGlzcF9vcmlnDQoNCiMjU1MNCiMjUEVSTUFOT1ZBDQpDb3JhbC5UUDMucGVybV9TUzwtYWRvbmlzMih2ZWdkaXN0KENvcmFsLmxvZ19UUDNbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIil+IENvcmFsLmxvZ19UUDMkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IlNTIildLCBkYXRhPUNvcmFsLmxvZ19UUDNbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iU1MiKSxdLCBzdHJhdGE9Q29yYWwubG9nX1RQMyRHZW5vdHlwZVt3aGljaChDb3JhbC5sb2dfVFAzJFNpdGU9PSJTUyIpXSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDMucGVybV9TUykNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFAzLlNTLmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDNbd2hpY2goQ29yYWwubG9nX1RQMyRTaXRlPT0iU1MiKSxjKDExOjE0LCAxNildLCAiZXVjbGlkZWFuIiksIENvcmFsLmxvZ19UUDMkT3JpZ2luW3doaWNoKENvcmFsLmxvZ19UUDMkU2l0ZT09IlNTIildKSkNClRQMy5TUy5kaXNwX29yaWcNCg0KIyNTYXZlIHJlc3VsdHMNClBFUk1fVDMuc2l0ZS5yZXM8LWRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAzLnBlcm1fS0wpWzEsXSkNClBFUk1fVDMuc2l0ZS5yZXM8LXJiaW5kKFBFUk1fVDMuc2l0ZS5yZXMsIGRhdGEuZnJhbWUoYWRvbmlzX09tZWdhU3EoQ29yYWwuVFAzLnBlcm1fU1MpWzEsXSkpDQpQRVJNX1QzLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQRVJNX1QzLnNpdGUucmVzJHBfRElTUDwtYyhUUDMuS0wuZGlzcF9vcmlnJGBQcig+RilgWzFdLCBUUDMuU1MuZGlzcF9vcmlnJGBQcig+RilgWzFdKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANClBFUk1fVDMucmVzPC1yYmluZChQRVJNX1QzLnJlcywgUEVSTV9UMy5zaXRlLnJlcykNClBFUk1fVDMucmVzJFRpbWVwb2ludDwtcmVwKCJUUDMiLCBucm93KFBFUk1fVDMucmVzKSkNCg0KDQpgYGANCg0KDQojIyMgVFA0DQpgYGB7cn0NCiMjU3Vic2V0IFRpbWVwb2ludCA0IA0KQ29yYWwubG9nX1RQNDwtc3Vic2V0KENvcmFsLmxvZywgVGltZVA9PSJUUDQiKQ0KDQpgYGANCg0KIyMjIyBQRVJNQU5PVkENCmBgYHtyfQ0KIyNQRVJNQU5PVkENCkNvcmFsLlRQNC5wZXJtPC1hZG9uaXMyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQNFssYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFA0JE9yaWdpbiAqIENvcmFsLmxvZ19UUDQkU2l0ZSwgZGF0YT1Db3JhbC5sb2dfVFA0LCBzdHJhdGE9Q29yYWwubG9nX1RQNCRHZW5vdHlwZSwgbWV0aG9kPSJldWNsaWRlYW4iKQ0KDQojI0VmZmVjdCBTaXplDQphZG9uaXNfT21lZ2FTcShDb3JhbC5UUDQucGVybSkNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbg0KVFA0LmRpc3Bfb3JpZzwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDRbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQNCRPcmlnaW4pKQ0KVFA0LmRpc3Bfb3JpZw0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgU2l0ZQ0KVFA0LmRpc3Bfc2l0ZTwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDRbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQNCRTaXRlKSkNClRQNC5kaXNwX3NpdGUNCg0KIyNDaGVjayBkaXNwZXJzaW9uIGJ5IE9yaWdpbjpTaXRlDQpUUDQuZGlzcF9vczwtYW5vdmEoYmV0YWRpc3Blcih2ZWdkaXN0KENvcmFsLmxvZ19UUDRbLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQNCRPcmlnaW46Q29yYWwubG9nX1RQNCRTaXRlKSkNClRQNC5kaXNwX29zDQoNCiMjU2F2ZSByZXN1bHRzDQpQRVJNX1Q0LnJlczwtZGF0YS5mcmFtZShhZG9uaXNfT21lZ2FTcShDb3JhbC5UUDQucGVybSlbMTozLF0pDQpQRVJNX1Q0LnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KUEVSTV9UNC5yZXMkcF9ESVNQPC1jKFRQNC5kaXNwX29yaWckYFByKD5GKWBbMV0sIFRQNC5kaXNwX3NpdGUkYFByKD5GKWBbMV0sIFRQNC5kaXNwX29zJGBQcig+RilgWzFdKQ0KDQpgYGANCg0KDQojIyMjIEVmZmVjdCBTaXplDQpDYWxjdWxhdGUgRWZmZWN0IFNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KIyNQRVJNQU5PVkENCkNvcmFsLlRQNC5wZXJtX0tMPC1hZG9uaXMyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQNFt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJLTCIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKX4gQ29yYWwubG9nX1RQNCRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iS0wiKV0sIGRhdGE9Q29yYWwubG9nX1RQNFt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJLTCIpLF0sIHN0cmF0YT1Db3JhbC5sb2dfVFA0JEdlbm90eXBlW3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IktMIildLCBtZXRob2Q9ImV1Y2xpZGVhbiIpDQoNCiMjRWZmZWN0IFNpemUNCmFkb25pc19PbWVnYVNxKENvcmFsLlRQNC5wZXJtX0tMKQ0KDQojI0NoZWNrIGRpc3BlcnNpb24gYnkgT3JpZ2luDQpUUDQuS0wuZGlzcF9vcmlnPC1hbm92YShiZXRhZGlzcGVyKHZlZ2Rpc3QoQ29yYWwubG9nX1RQNFt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJLTCIpLGMoMTE6MTQsIDE2KV0sICJldWNsaWRlYW4iKSwgQ29yYWwubG9nX1RQNCRPcmlnaW5bd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iS0wiKV0pKQ0KVFA0LktMLmRpc3Bfb3JpZw0KDQojI1NTDQojI1BFUk1BTk9WQQ0KQ29yYWwuVFA0LnBlcm1fU1M8LWFkb25pczIodmVnZGlzdChDb3JhbC5sb2dfVFA0W3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IlNTIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpfiBDb3JhbC5sb2dfVFA0JE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJTUyIpXSwgZGF0YT1Db3JhbC5sb2dfVFA0W3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IlNTIiksXSwgc3RyYXRhPUNvcmFsLmxvZ19UUDQkR2Vub3R5cGVbd2hpY2goQ29yYWwubG9nX1RQNCRTaXRlPT0iU1MiKV0sIG1ldGhvZD0iZXVjbGlkZWFuIikNCg0KIyNFZmZlY3QgU2l6ZQ0KYWRvbmlzX09tZWdhU3EoQ29yYWwuVFA0LnBlcm1fU1MpDQoNCiMjQ2hlY2sgZGlzcGVyc2lvbiBieSBPcmlnaW4NClRQNC5TUy5kaXNwX29yaWc8LWFub3ZhKGJldGFkaXNwZXIodmVnZGlzdChDb3JhbC5sb2dfVFA0W3doaWNoKENvcmFsLmxvZ19UUDQkU2l0ZT09IlNTIiksYygxMToxNCwgMTYpXSwgImV1Y2xpZGVhbiIpLCBDb3JhbC5sb2dfVFA0JE9yaWdpblt3aGljaChDb3JhbC5sb2dfVFA0JFNpdGU9PSJTUyIpXSkpDQpUUDQuU1MuZGlzcF9vcmlnDQoNCiMjU2F2ZSByZXN1bHRzDQpQRVJNX1Q0LnNpdGUucmVzPC1kYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQNC5wZXJtX0tMKVsxLF0pDQpQRVJNX1Q0LnNpdGUucmVzPC1yYmluZChQRVJNX1Q0LnNpdGUucmVzLCBkYXRhLmZyYW1lKGFkb25pc19PbWVnYVNxKENvcmFsLlRQNC5wZXJtX1NTKVsxLF0pKQ0KUEVSTV9UNC5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KUEVSTV9UNC5zaXRlLnJlcyRwX0RJU1A8LWMoVFA0LktMLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSwgVFA0LlNTLmRpc3Bfb3JpZyRgUHIoPkYpYFsxXSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpQRVJNX1Q0LnJlczwtcmJpbmQoUEVSTV9UNC5yZXMsIFBFUk1fVDQuc2l0ZS5yZXMpDQpQRVJNX1Q0LnJlcyRUaW1lcG9pbnQ8LXJlcCgiVFA0IiwgbnJvdyhQRVJNX1Q0LnJlcykpDQoNCmBgYA0KDQoNCiMgVW5pdmFyaWF0ZSANCg0KIyMjIFRQMQ0KDQpgYGB7cn0NCiMjU3Vic2V0IFRpbWVwb2ludCAxIA0KQ29yYWwuVFAxPC1zdWJzZXQoQ29yYWwucm0sIFRpbWVQPT0iVFAxIikNCg0KYGBgDQoNCg0KIyMjIyBQcm90ZWluIEhvc3QgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMSRUUF91Zy5jbTJfQykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDEkVFBfdWcuY20yX0MpDQojTm9ybWFsDQoNCiMjTW9kZWwgDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KUHJvdC5DLmxtZV9UUDE8LWxtZXIoVFBfdWcuY20yX0N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMSkNCg0KIyNDaGVjayByZXNpZHVhbHMNClByb3QuQy5sbWVfcmVzX1RQMSA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IFByb3QuQy5sbWVfVFAxLCBwbG90ID0gRikNCnBsb3QoUHJvdC5DLmxtZV9yZXNfVFAxKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoUHJvdC5DLmxtZV9UUDEpDQoNCmV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFAxKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KUHJvdC5DX1RQMS5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShQcm90LkMubG1lX1RQMSkkY29lZmZpY2llbnRzWy0xLF0pDQpQcm90LkNfVFAxLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KUHJvdC5DX1RQMS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoUHJvdC5DLmxtZV9UUDEpJEV0YTIpDQpQcm90LkNfVFAxLnJlcyRSZXNwb25zZTwtcmVwKCJQcm90ZWluIEhvc3QiLCBucm93KFByb3QuQ19UUDEucmVzKSkNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBTeW1iaW9udCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAxJFRQX3VnLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMSRUUF91Zy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuUy5sbWVfVFAxPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDEpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LlMubG1lX3Jlc19UUDEgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LlMubG1lX1RQMSwgcGxvdCA9IEYpDQpwbG90KFByb3QuUy5sbWVfcmVzX1RQMSkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAxKQ0KDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMSkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuU19UUDEucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDEpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5TX1RQMS5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuU19UUDEucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAxKSRFdGEyKQ0KUHJvdC5TX1RQMS5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMS5yZXMpKQ0KYGBgDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNClByb3QuUy5sbWVfVFAxX0tMPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxW3doaWNoKENvcmFsLlRQMSRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShQcm90LlMubG1lX1RQMV9LTCkNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAxX0tMKQ0KDQoNCiMjU1MNClByb3QuUy5sbWVfVFAxX1NTPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxW3doaWNoKENvcmFsLlRQMSRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShQcm90LlMubG1lX1RQMV9TUykNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAxX1NTKQ0KDQoNCiMjU2F2ZSByZXN1bHRzDQpQcm90LlNfVFAxLnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDFfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KFByb3QuUy5sbWVfVFAxX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpQcm90LlNfVFAxLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQcm90LlNfVFAxLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAxX0tMKSRFdGEyLCBldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMV9TUykkRXRhMikNClByb3QuU19UUDEuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMS5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KUHJvdC5TX1RQMS5yZXM8LXJiaW5kKFByb3QuU19UUDEucmVzLCBQcm90LlNfVFAxLnNpdGUucmVzKQ0KDQpgYGANCg0KDQoNCmBgYHtyIFBsb3QgUHJvdGVpbiBTeW1iaW9udCBUUDF9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMV9Qcm90U3ltLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMSwgbWVhc3VyZXZhcj0iVFBfdWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IFByb3RlaW4gYWNyb3NzIFRyZWF0bWVudHMNClRQMV9Qcm90U3ltLnBsb3Q8LWdncGxvdChUUDFfUHJvdFN5bS5zdW0sIGFlcyh4PVNpdGUsIHk9VFBfdWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1UUF91Zy5jbTJfUy1zZSwgeW1heD1UUF91Zy5jbTJfUytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBQcm90ZWluIChcdTAzQkNnIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDI1MCwgNTUwKSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PTIsIHk9NTM1LCBsYWJlbD0iKioiLCBzaXplPXNpZy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAxX1Byb3RTeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBCaW9tYXNzIEhvc3QgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMSRBRkRXX21nLmNtMl9DKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMSRBRkRXX21nLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQmlvLkMubG1lX1RQMTwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDEpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpCaW8uQy5sbWVfcmVzX1RQMSA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IEJpby5DLmxtZV9UUDEsIHBsb3QgPSBGKQ0KcGxvdChCaW8uQy5sbWVfcmVzX1RQMSkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDEpDQoNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDEpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpCaW8uQ19UUDEucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQmlvLkMubG1lX1RQMSkkY29lZmZpY2llbnRzWy0xLF0pDQpCaW8uQ19UUDEucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpCaW8uQ19UUDEucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDEpJEV0YTIpDQpCaW8uQ19UUDEucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgSG9zdCIsIG5yb3coQmlvLkNfVFAxLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5DLmxtZV9UUDFfS0w8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQMV9LTCkNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDFfS0wpDQoNCiMjU1MNCkJpby5DLmxtZV9UUDFfU1M8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQMV9TUykNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDFfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uQ19UUDEuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uQy5sbWVfVFAxX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShCaW8uQy5sbWVfVFAxX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpCaW8uQ19UUDEuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNCkJpby5DX1RQMS5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAxX0tMKSRFdGEyLCBldGFfc3F1YXJlZChCaW8uQy5sbWVfVFAxX1NTKSRFdGEyKQ0KQmlvLkNfVFAxLnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgSG9zdCIsIG5yb3coQmlvLkNfVFAxLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpCaW8uQ19UUDEucmVzPC1yYmluZChCaW8uQ19UUDEucmVzLCBCaW8uQ19UUDEuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQmlvbWFzcyBIb3N0IFRQMX0NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFAxX0Jpb0hvc3Quc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAxLCBtZWFzdXJldmFyPSJBRkRXX21nLmNtMl9DIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBIb3N0IEJpb21hc3MgYWNyb3NzIFRyZWF0bWVudHMNClRQMV9CaW9Ib3N0LnBsb3Q8LWdncGxvdChUUDFfQmlvSG9zdC5zdW0sIGFlcyh4PVNpdGUsIHk9QUZEV19tZy5jbTJfQywgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUFGRFdfbWcuY20yX0Mtc2UsIHltYXg9QUZEV19tZy5jbTJfQytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnSG9zdCBCaW9tYXNzIChtZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjgsIDEuNikrDQogICBhbm5vdGF0ZSgidGV4dCIsIHg9MSwgeT0xLjMsIGxhYmVsPSIqIiwgc2l6ZT1zaWcuc3osIGZvbnRmYWNlPSJib2xkIik7IFRQMV9CaW9Ib3N0LnBsb3QNCmBgYA0KDQoNCg0KIyMjIyBCaW9tYXNzIFN5bWJpb250cyANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAxJEFGRFdfbWcuY20yX1MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAxJEFGRFdfbWcuY20yX1MpDQojTm9ybWFsDQoNCiMjTW9kZWwgDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQmlvLlMubG1lX1RQMTwtbG1lcihBRkRXX21nLmNtMl9Tfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDEpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpCaW8uUy5sbWVfcmVzX1RQMSA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IEJpby5TLmxtZV9UUDEsIHBsb3QgPSBGKQ0KcGxvdChCaW8uUy5sbWVfcmVzX1RQMSkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KEJpby5TLmxtZV9UUDEpDQoNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDEpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpCaW8uU19UUDEucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQmlvLlMubG1lX1RQMSkkY29lZmZpY2llbnRzWy0xLF0pDQpCaW8uU19UUDEucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpCaW8uU19UUDEucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDEpJEV0YTIpDQpCaW8uU19UUDEucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgU3ltYmlvbnQiLCBucm93KEJpby5TX1RQMS5yZXMpKQ0KDQpgYGANCg0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpCaW8uUy5sbWVfVFAxX0tMPC1sbWVyKEFGRFdfbWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDFbd2hpY2goQ29yYWwuVFAxJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KEJpby5TLmxtZV9UUDFfS0wpDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAxX0tMKQ0KDQoNCiMjU1MNCkJpby5TLmxtZV9UUDFfU1M8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMVt3aGljaChDb3JhbC5UUDEkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQMV9TUykNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDFfU1MpDQoNCg0KIyNTYXZlIHJlc3VsdHMNCkJpby5TX1RQMS5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KEJpby5TLmxtZV9UUDFfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQmlvLlMubG1lX1RQMV9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQmlvLlNfVFAxLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpCaW8uU19UUDEuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMV9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMV9TUykkRXRhMikNCkJpby5TX1RQMS5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIFN5bWJpb250IiwgbnJvdyhCaW8uU19UUDEuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkJpby5TX1RQMS5yZXM8LXJiaW5kKEJpby5TX1RQMS5yZXMsIEJpby5TX1RQMS5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBCaW9tYXNzIFN5bWJpb250IFRQMX0NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFAxX0Jpb1N5bS5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDEsIG1lYXN1cmV2YXI9IkFGRFdfbWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IEJpb21hc3MgYWNyb3NzIFRyZWF0bWVudHMNClRQMV9CaW9TeW0ucGxvdDwtZ2dwbG90KFRQMV9CaW9TeW0uc3VtLCBhZXMoeD1TaXRlLCB5PUFGRFdfbWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BRkRXX21nLmNtMl9TLXNlLCB5bWF4PUFGRFdfbWcuY20yX1Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnU3ltYmlvbnQgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC40NSwgMC45NSkrDQogIGFubm90YXRlKCJ0ZXh0IiwgeD0yLCB5PTAuOCwgbGFiZWw9IioqIiwgc2l6ZT1zaWcuc3osIGZvbnRmYWNlPSJib2xkIik7IFRQMV9CaW9TeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBDaGxvcm9waHlsbA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDEkQ2hsX3VnLmNtMikNCnNoYXBpcm8udGVzdChDb3JhbC5UUDEkQ2hsX3VnLmNtMikNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkNobC5sbWVfVFAxPC1sbWVyKENobF91Zy5jbTJ+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMSkNCg0KIyNDaGVjayByZXNpZHVhbHMNCkNobC5sbWVfcmVzX1RQMSA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IENobC5sbWVfVFAxLCBwbG90ID0gRikNCnBsb3QoQ2hsLmxtZV9yZXNfVFAxKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQ2hsLmxtZV9UUDEpDQoNCmV0YV9zcXVhcmVkKENobC5sbWVfVFAxKQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQ2hsX1RQMS5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShDaGwubG1lX1RQMSkkY29lZmZpY2llbnRzWy0xLF0pDQpDaGxfVFAxLnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQ2hsX1RQMS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDEpJEV0YTIpDQpDaGxfVFAxLnJlcyRSZXNwb25zZTwtcmVwKCJDaGxvcm9waHlsbCIsIG5yb3coQ2hsX1RQMS5yZXMpKQ0KDQpgYGANCg0KDQpFZmZlY3Qgc2l6ZSBvZiBPcmlnaW4gZm9yIGVhY2ggU2l0ZQ0KYGBge3J9DQojI0tMDQpDaGwubG1lX1RQMV9LTDwtbG1lcihDaGxfdWcuY20yfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxW3doaWNoKENvcmFsLlRQMSRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShDaGwubG1lX1RQMV9LTCkNCmV0YV9zcXVhcmVkKENobC5sbWVfVFAxX0tMKQ0KDQojI1NTDQpDaGwubG1lX1RQMV9TUzwtbG1lcihDaGxfdWcuY20yfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAxW3doaWNoKENvcmFsLlRQMSRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShDaGwubG1lX1RQMV9TUykNCmV0YV9zcXVhcmVkKENobC5sbWVfVFAxX1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KQ2hsX1RQMS5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KENobC5sbWVfVFAxX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KENobC5sbWVfVFAxX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpDaGxfVFAxLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpDaGxfVFAxLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKENobC5sbWVfVFAxX0tMKSRFdGEyLCBldGFfc3F1YXJlZChDaGwubG1lX1RQMV9TUykkRXRhMikNCkNobF9UUDEuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQ2hsb3JvcGh5bGwiLCBucm93KENobF9UUDEuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkNobF9UUDEucmVzPC1yYmluZChDaGxfVFAxLnJlcywgQ2hsX1RQMS5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBDaGxvcm9waHlsbCBUUDF9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMV9DaGwuc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAxLCBtZWFzdXJldmFyPSJDaGxfdWcuY20yIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBDaGxvcm9waHlsbCBhY3Jvc3MgVHJlYXRtZW50cw0KVFAxX0NobC5wbG90PC1nZ3Bsb3QoVFAxX0NobC5zdW0sIGFlcyh4PVNpdGUsIHk9Q2hsX3VnLmNtMiwgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUNobF91Zy5jbTItc2UsIHltYXg9Q2hsX3VnLmNtMitzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdUb3RhbCBDaGxvcm9waHlsbCAoXHUwM0JDZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjUsIDMuMjUpKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9MiwgeT0xLjcsIGxhYmVsPSIqKioiLCBzaXplPXNpZy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAxX0NobC5wbG90DQpgYGANCg0KDQojIyMjIFNhdmUgUmVzdWx0cw0KYGBge3J9DQojI0NvbWJpbmUgUmVzdWx0cw0KUGh5c19UMS5yZXM8LXJiaW5kKFByb3QuQ19UUDEucmVzLCBQcm90LlNfVFAxLnJlcywgQmlvLkNfVFAxLnJlcywgQmlvLlNfVFAxLnJlcywgQ2hsX1RQMS5yZXMpDQoNCiMjQWRkIFRpbWVwb2ludA0KUGh5c19UMS5yZXMkVGltZVA8LXJlcCgiVFAxIiwgbnJvdyhQaHlzX1QxLnJlcykpDQoNCmBgYA0KDQoNCiMjIyBUUDINCg0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgMiANCkNvcmFsLlRQMjwtc3Vic2V0KENvcmFsLnJtLCBUaW1lUD09IlRQMiIpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDIkVFBfdWcuY20yX0MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAyJFRQX3VnLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuQy5sbWVfVFAyPC1sbWVyKFRQX3VnLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDIpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LkMubG1lX3Jlc19UUDIgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LkMubG1lX1RQMiwgcGxvdCA9IEYpDQpwbG90KFByb3QuQy5sbWVfcmVzX1RQMikNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuQy5sbWVfVFAyKQ0KDQpldGFfc3F1YXJlZChQcm90LkMubG1lX1RQMikNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuQ19UUDIucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5DLmxtZV9UUDIpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5DX1RQMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuQ19UUDIucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFAyKSRFdGEyKQ0KUHJvdC5DX1RQMi5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBIb3N0IiwgbnJvdyhQcm90LkNfVFAyLnJlcykpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBTeW1iaW9udCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAyJFRQX3VnLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMiRUUF91Zy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuUy5sbWVfVFAyPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDIpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LlMubG1lX3Jlc19UUDIgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LlMubG1lX1RQMiwgcGxvdCA9IEYpDQpwbG90KFByb3QuUy5sbWVfcmVzX1RQMikNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAyKQ0KDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMikNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuU19UUDIucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDIpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5TX1RQMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuU19UUDIucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAyKSRFdGEyKQ0KUHJvdC5TX1RQMi5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMi5yZXMpKQ0KDQpgYGANCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KUHJvdC5TLmxtZV9UUDJfS0w8LWxtZXIoVFBfdWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDJbd2hpY2goQ29yYWwuVFAyJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAyX0tMKQ0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDJfS0wpDQoNCiMjU1MNClByb3QuUy5sbWVfVFAyX1NTPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAyW3doaWNoKENvcmFsLlRQMiRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShQcm90LlMubG1lX1RQMl9TUykNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAyX1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KUHJvdC5TX1RQMi5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KFByb3QuUy5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KFByb3QuUy5sbWVfVFAyX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpQcm90LlNfVFAyLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQcm90LlNfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAyX0tMKSRFdGEyLCBldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMl9TUykkRXRhMikNClByb3QuU19UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMi5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KUHJvdC5TX1RQMi5yZXM8LXJiaW5kKFByb3QuU19UUDIucmVzLCBQcm90LlNfVFAyLnNpdGUucmVzKQ0KDQpgYGANCg0KDQoNCmBgYHtyIFBsb3QgUHJvdGVpbiBTeW1iaW9udCBUUDJ9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMl9Qcm90U3ltLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMiwgbWVhc3VyZXZhcj0iVFBfdWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IFByb3RlaW4gYWNyb3NzIFRyZWF0bWVudHMNClRQMl9Qcm90U3ltLnBsb3Q8LWdncGxvdChUUDJfUHJvdFN5bS5zdW0sIGFlcyh4PVNpdGUsIHk9VFBfdWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1UUF91Zy5jbTJfUy1zZSwgeW1heD1UUF91Zy5jbTJfUytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBQcm90ZWluIChcdTAzQkNnIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDI1MCwgNTUwKTsgVFAyX1Byb3RTeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBCaW9tYXNzIEhvc3QgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMiRBRkRXX21nLmNtMl9DKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMiRBRkRXX21nLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQmlvLkMubG1lX1RQMjwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDIpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpCaW8uQy5sbWVfcmVzX1RQMiA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IEJpby5DLmxtZV9UUDIsIHBsb3QgPSBGKQ0KcGxvdChCaW8uQy5sbWVfcmVzX1RQMikNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDIpDQoNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDIpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpCaW8uQ19UUDIucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQmlvLkMubG1lX1RQMikkY29lZmZpY2llbnRzWy0xLF0pDQpCaW8uQ19UUDIucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpCaW8uQ19UUDIucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDIpJEV0YTIpDQpCaW8uQ19UUDIucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgSG9zdCIsIG5yb3coQmlvLkNfVFAyLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5DLmxtZV9UUDJfS0w8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQMl9LTCkNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfS0wpDQoNCiMjU1MNCkJpby5DLmxtZV9UUDJfU1M8LWxtZXIoQUZEV19tZy5jbTJfQ35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLkMubG1lX1RQMl9TUykNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uQ19UUDIuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uQy5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5DLmxtZV9UUDJfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5DX1RQMi5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLkNfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDJfU1MpJEV0YTIpDQpCaW8uQ19UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBIb3N0IiwgbnJvdyhCaW8uQ19UUDIuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkJpby5DX1RQMi5yZXM8LXJiaW5kKEJpby5DX1RQMi5yZXMsIEJpby5DX1RQMi5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBCaW9tYXNzIEhvc3QgVFAyfQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDJfQmlvSG9zdC5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDIsIG1lYXN1cmV2YXI9IkFGRFdfbWcuY20yX0MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIEhvc3QgQmlvbWFzcyBhY3Jvc3MgVHJlYXRtZW50cw0KVFAyX0Jpb0hvc3QucGxvdDwtZ2dwbG90KFRQMl9CaW9Ib3N0LnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9DLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfQy1zZSwgeW1heD1BRkRXX21nLmNtMl9DK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ0hvc3QgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC44LCAxLjYpKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9MiwgeT0xLjM1LCBsYWJlbD0iLSIsIHNpemU9bGV2ZWxzLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBUUDJfQmlvSG9zdC5wbG90DQpgYGANCg0KDQojIyMjIEJpb21hc3MgU3ltYmlvbnRzIA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDIkQUZEV19tZy5jbTJfUykNCnNoYXBpcm8udGVzdChDb3JhbC5UUDIkQUZEV19tZy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbCANCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpCaW8uUy5sbWVfVFAyPC1sbWVyKEFGRFdfbWcuY20yX1N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMikNCg0KIyNDaGVjayByZXNpZHVhbHMNCkJpby5TLmxtZV9yZXNfVFAyIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQmlvLlMubG1lX1RQMiwgcGxvdCA9IEYpDQpwbG90KEJpby5TLmxtZV9yZXNfVFAyKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQmlvLlMubG1lX1RQMikNCg0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMikNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkJpby5TX1RQMi5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShCaW8uUy5sbWVfVFAyKSRjb2VmZmljaWVudHNbLTEsXSkNCkJpby5TX1RQMi5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkJpby5TX1RQMi5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMikkRXRhMikNCkJpby5TX1RQMi5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFAyLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5TLmxtZV9UUDJfS0w8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQMl9LTCkNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfS0wpDQoNCiMjU1MNCkJpby5TLmxtZV9UUDJfU1M8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQmlvLlMubG1lX1RQMl9TUykNCmV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpCaW8uU19UUDIuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShCaW8uUy5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KEJpby5TLmxtZV9UUDJfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkJpby5TX1RQMi5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQmlvLlNfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKEJpby5TLmxtZV9UUDJfU1MpJEV0YTIpDQpCaW8uU19UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFAyLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpCaW8uU19UUDIucmVzPC1yYmluZChCaW8uU19UUDIucmVzLCBCaW8uU19UUDIuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQmlvbWFzcyBTeW1iaW9udCBUUDJ9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMl9CaW9TeW0uc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAyLCBtZWFzdXJldmFyPSJBRkRXX21nLmNtMl9TIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBTeW1iaW9udCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDJfQmlvU3ltLnBsb3Q8LWdncGxvdChUUDJfQmlvU3ltLnN1bSwgYWVzKHg9U2l0ZSwgeT1BRkRXX21nLmNtMl9TLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49QUZEV19tZy5jbTJfUy1zZSwgeW1heD1BRkRXX21nLmNtMl9TK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSAidG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBCaW9tYXNzIChtZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjQ1LCAwLjk1KSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PTEsIHk9MC43OCwgbGFiZWw9IioiLCBzaXplPXNpZy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAyX0Jpb1N5bS5wbG90DQpgYGANCg0KDQojIyMjIENobG9yb3BoeWxsDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMiRDaGxfdWcuY20yKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMiRDaGxfdWcuY20yKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQ2hsLmxtZV9UUDI8LWxtZXIoQ2hsX3VnLmNtMn5PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAyKQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQ2hsLmxtZV9yZXNfVFAyIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQ2hsLmxtZV9UUDIsIHBsb3QgPSBGKQ0KcGxvdChDaGwubG1lX3Jlc19UUDIpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShDaGwubG1lX1RQMikNCg0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDIpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpDaGxfVFAyLnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KENobC5sbWVfVFAyKSRjb2VmZmljaWVudHNbLTEsXSkNCkNobF9UUDIucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpDaGxfVFAyLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChDaGwubG1lX1RQMikkRXRhMikNCkNobF9UUDIucmVzJFJlc3BvbnNlPC1yZXAoIkNobG9yb3BoeWxsIiwgbnJvdyhDaGxfVFAyLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkNobC5sbWVfVFAyX0tMPC1sbWVyKENobF91Zy5jbTJ+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDJbd2hpY2goQ29yYWwuVFAyJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KENobC5sbWVfVFAyX0tMKQ0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDJfS0wpDQoNCg0KIyNTUw0KQ2hsLmxtZV9UUDJfU1M8LWxtZXIoQ2hsX3VnLmNtMn5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMlt3aGljaChDb3JhbC5UUDIkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDJfU1MpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQMl9TUykNCg0KDQojI1NhdmUgcmVzdWx0cw0KQ2hsX1RQMi5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KENobC5sbWVfVFAyX0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KENobC5sbWVfVFAyX1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpDaGxfVFAyLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpDaGxfVFAyLnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKENobC5sbWVfVFAyX0tMKSRFdGEyLCBldGFfc3F1YXJlZChDaGwubG1lX1RQMl9TUykkRXRhMikNCkNobF9UUDIuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiQ2hsb3JvcGh5bGwiLCBucm93KENobF9UUDIuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkNobF9UUDIucmVzPC1yYmluZChDaGxfVFAyLnJlcywgQ2hsX1RQMi5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBDaGxvcm9waHlsbCBUUDJ9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQMl9DaGwuc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAyLCBtZWFzdXJldmFyPSJDaGxfdWcuY20yIiwgZ3JvdXB2YXJzPWMoIlNpdGUiLCAiT3JpZ2luIiwgIlNpdGUuT3JpZyIpLCBuYS5ybT1UUlVFKQ0KDQojI1Bsb3QgQXZlcmFnZSBDaGxvcm9waHlsbCBhY3Jvc3MgVHJlYXRtZW50cw0KVFAyX0NobC5wbG90PC1nZ3Bsb3QoVFAyX0NobC5zdW0sIGFlcyh4PVNpdGUsIHk9Q2hsX3VnLmNtMiwgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUNobF91Zy5jbTItc2UsIHltYXg9Q2hsX3VnLmNtMitzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0gInRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnVG90YWwgQ2hsb3JvcGh5bGwgKFx1MDNCQ2cgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC41LCAzLjI1KSsNCiAgYW5ub3RhdGUoInRleHQiLCB4PWMoMSwyKSwgeT1jKDEuNSwgMi42KSwgbGFiZWw9IioiLCBzaXplPXNpZy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAyX0NobC5wbG90DQpgYGANCg0KDQojIyMjIFNhdmUgUmVzdWx0cw0KYGBge3J9DQojI0NvbWJpbmUgUmVzdWx0cw0KUGh5c19UMi5yZXM8LXJiaW5kKFByb3QuQ19UUDIucmVzLCBQcm90LlNfVFAyLnJlcywgQmlvLkNfVFAyLnJlcywgQmlvLlNfVFAyLnJlcywgQ2hsX1RQMi5yZXMpDQoNCiMjQWRkIFRpbWVwb2ludA0KUGh5c19UMi5yZXMkVGltZVA8LXJlcCgiVFAyIiwgbnJvdyhQaHlzX1QyLnJlcykpDQoNCmBgYA0KDQoNCiMjIyBUUDMNCg0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgMyANCkNvcmFsLlRQMzwtc3Vic2V0KENvcmFsLnJtLCBUaW1lUD09IlRQMyIpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDMkVFBfdWcuY20yX0MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAzJFRQX3VnLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuQy5sbWVfVFAzPC1sbWVyKFRQX3VnLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDMpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LkMubG1lX3Jlc19UUDMgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LkMubG1lX1RQMywgcGxvdCA9IEYpDQpwbG90KFByb3QuQy5sbWVfcmVzX1RQMykNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuQy5sbWVfVFAzKQ0KDQpldGFfc3F1YXJlZChQcm90LkMubG1lX1RQMykNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuQ19UUDMucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5DLmxtZV9UUDMpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5DX1RQMy5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuQ19UUDMucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFAzKSRFdGEyKQ0KUHJvdC5DX1RQMy5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBIb3N0IiwgbnJvdyhQcm90LkNfVFAzLnJlcykpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBTeW1iaW9udCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAzJFRQX3VnLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMyRUUF91Zy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuUy5sbWVfVFAzPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDMpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LlMubG1lX3Jlc19UUDMgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LlMubG1lX1RQMywgcGxvdCA9IEYpDQpwbG90KFByb3QuUy5sbWVfcmVzX1RQMykNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAzKQ0KDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQMykNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuU19UUDMucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDMpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5TX1RQMy5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuU19UUDMucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAzKSRFdGEyKQ0KUHJvdC5TX1RQMy5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQMy5yZXMpKQ0KDQpgYGANCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KUHJvdC5TLmxtZV9UUDNfS0w8LWxtZXIoVFBfdWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAzX0tMKQ0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDNfS0wpDQoNCg0KIyNTUw0KUHJvdC5TLmxtZV9UUDNfU1M8LWxtZXIoVFBfdWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFAzX1NTKQ0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDNfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpQcm90LlNfVFAzLnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDNfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoUHJvdC5TLmxtZV9UUDNfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNClByb3QuU19UUDMuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNClByb3QuU19UUDMuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDNfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFAzX1NTKSRFdGEyKQ0KUHJvdC5TX1RQMy5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJQcm90ZWluIFN5bWJpb250IiwgbnJvdyhQcm90LlNfVFAzLnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpQcm90LlNfVFAzLnJlczwtcmJpbmQoUHJvdC5TX1RQMy5yZXMsIFByb3QuU19UUDMuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCg0KYGBge3IgUGxvdCBQcm90ZWluIFN5bWJpb250IFRQM30NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFAzX1Byb3RTeW0uc3VtPC1zdW1tYXJ5U0UoQ29yYWwuVFAzLCBtZWFzdXJldmFyPSJUUF91Zy5jbTJfUyIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgU3ltYmlvbnQgUHJvdGVpbiBhY3Jvc3MgVHJlYXRtZW50cw0KVFAzX1Byb3RTeW0ucGxvdDwtZ2dwbG90KFRQM19Qcm90U3ltLnN1bSwgYWVzKHg9U2l0ZSwgeT1UUF91Zy5jbTJfUywgY29sb3VyPVNpdGUuT3JpZykpICsgDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU9yaWcuY29sb3JzLm8pKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPVRQX3VnLmNtMl9TLXNlLCB5bWF4PVRQX3VnLmNtMl9TK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ1N5bWJpb250IFByb3RlaW4gKFx1MDNCQ2cgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMjUwLCA1NTApOyBUUDNfUHJvdFN5bS5wbG90DQpgYGANCg0KDQojIyMjIEJpb21hc3MgSG9zdCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFAzJEFGRFdfbWcuY20yX0MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFAzJEFGRFdfbWcuY20yX0MpDQojTm9ybWFsDQoNCiMjTW9kZWwNCiNGdW5jdGlvbiBvZiBTaXRlIGFuZCBPcmlnaW4sIHdpdGggR2Vub3R5cGUgYXMgYSBSYW5kb20gZWZmZWN0DQojSW50ZXJhY3Rpb25zIGJldHdlZW4gT3JpZ2luIGFuZCBTaXRlDQpCaW8uQy5sbWVfVFAzPC1sbWVyKEFGRFdfbWcuY20yX0N+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMykNCg0KIyNDaGVjayByZXNpZHVhbHMNCkJpby5DLmxtZV9yZXNfVFAzIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQmlvLkMubG1lX1RQMywgcGxvdCA9IEYpDQpwbG90KEJpby5DLmxtZV9yZXNfVFAzKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQmlvLkMubG1lX1RQMykNCg0KZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQMykNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkJpby5DX1RQMy5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShCaW8uQy5sbWVfVFAzKSRjb2VmZmljaWVudHNbLTEsXSkNCkJpby5DX1RQMy5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkJpby5DX1RQMy5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQMykkRXRhMikNCkJpby5DX1RQMy5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBIb3N0IiwgbnJvdyhCaW8uQ19UUDMucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KQmlvLkMubG1lX1RQM19LTDwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAzW3doaWNoKENvcmFsLlRQMyRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShCaW8uQy5sbWVfVFAzX0tMKQ0KZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQM19LTCkNCg0KIyNTUw0KQmlvLkMubG1lX1RQM19TUzwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAzW3doaWNoKENvcmFsLlRQMyRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShCaW8uQy5sbWVfVFAzX1NTKQ0KZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQM19TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkJpby5DX1RQMy5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KEJpby5DLmxtZV9UUDNfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQmlvLkMubG1lX1RQM19TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQmlvLkNfVFAzLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpCaW8uQ19UUDMuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQM19LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQM19TUykkRXRhMikNCkJpby5DX1RQMy5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIEhvc3QiLCBucm93KEJpby5DX1RQMy5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KQmlvLkNfVFAzLnJlczwtcmJpbmQoQmlvLkNfVFAzLnJlcywgQmlvLkNfVFAzLnNpdGUucmVzKQ0KDQpgYGANCg0KDQpgYGB7ciBQbG90IEJpb21hc3MgSG9zdCBUUDN9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQM19CaW9Ib3N0LnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQMywgbWVhc3VyZXZhcj0iQUZEV19tZy5jbTJfQyIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgSG9zdCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDNfQmlvSG9zdC5wbG90PC1nZ3Bsb3QoVFAzX0Jpb0hvc3Quc3VtLCBhZXMoeD1TaXRlLCB5PUFGRFdfbWcuY20yX0MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BRkRXX21nLmNtMl9DLXNlLCB5bWF4PUFGRFdfbWcuY20yX0Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnSG9zdCBCaW9tYXNzIChtZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjgsIDEuNik7IFRQM19CaW9Ib3N0LnBsb3QNCmBgYA0KDQoNCiMjIyMgQmlvbWFzcyBTeW1iaW9udHMgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQMyRBRkRXX21nLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQMyRBRkRXX21nLmNtMl9TKQ0KI1NsaWdodGx5IG5vbiBOb3JtYWwNCg0KaGlzdChsb2coQ29yYWwuVFAzJEFGRFdfbWcuY20yX1MrMSkpDQpzaGFwaXJvLnRlc3QobG9nKENvcmFsLlRQMyRBRkRXX21nLmNtMl9TKzEpKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkJpby5TLmxtZV9UUDM8LWxtZXIobG9nKEFGRFdfbWcuY20yX1MrMSl+T3JpZ2luKlNpdGUrKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQMykNCg0KIyNDaGVjayByZXNpZHVhbHMNCkJpby5TLmxtZV9yZXNfVFAzIDwtIHNpbXVsYXRlUmVzaWR1YWxzKGZpdHRlZE1vZGVsID0gQmlvLlMubG1lX1RQMywgcGxvdCA9IEYpDQpwbG90KEJpby5TLmxtZV9yZXNfVFAzKQ0KDQojI01vZGVsIHJlc3VsdHMNCnN1bW1hcnkoQmlvLlMubG1lX1RQMykNCg0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMykNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkJpby5TX1RQMy5yZXM8LWRhdGEuZnJhbWUoc3VtbWFyeShCaW8uUy5sbWVfVFAzKSRjb2VmZmljaWVudHNbLTEsXSkNCkJpby5TX1RQMy5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkJpby5TX1RQMy5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQMykkRXRhMikNCkJpby5TX1RQMy5yZXMkUmVzcG9uc2U8LXJlcCgiQmlvbWFzcyBTeW1iaW9udCIsIG5yb3coQmlvLlNfVFAzLnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCiMjS0wNCkJpby5TLmxtZV9UUDNfS0w8LWxtZXIobG9nKEFGRFdfbWcuY20yX1MrMSl+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KEJpby5TLmxtZV9UUDNfS0wpDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFAzX0tMKQ0KDQojI1NTDQpCaW8uUy5sbWVfVFAzX1NTPC1sbWVyKGxvZyhBRkRXX21nLmNtMl9TKzEpfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFAzW3doaWNoKENvcmFsLlRQMyRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShCaW8uUy5sbWVfVFAzX1NTKQ0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQM19TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkJpby5TX1RQMy5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KEJpby5TLmxtZV9UUDNfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQmlvLlMubG1lX1RQM19TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQmlvLlNfVFAzLnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpCaW8uU19UUDMuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQM19LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQM19TUykkRXRhMikNCkJpby5TX1RQMy5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIFN5bWJpb250IiwgbnJvdyhCaW8uU19UUDMuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkJpby5TX1RQMy5yZXM8LXJiaW5kKEJpby5TX1RQMy5yZXMsIEJpby5TX1RQMy5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBCaW9tYXNzIFN5bWJpb250IFRQM30NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFAzX0Jpb1N5bS5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDMsIG1lYXN1cmV2YXI9IkFGRFdfbWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IEJpb21hc3MgYWNyb3NzIFRyZWF0bWVudHMNClRQM19CaW9TeW0ucGxvdDwtZ2dwbG90KFRQM19CaW9TeW0uc3VtLCBhZXMoeD1TaXRlLCB5PUFGRFdfbWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BRkRXX21nLmNtMl9TLXNlLCB5bWF4PUFGRFdfbWcuY20yX1Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnU3ltYmlvbnQgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC40NSwgMC45NSk7IFRQM19CaW9TeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBDaGxvcm9waHlsbA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDMkQ2hsX3VnLmNtMikNCnNoYXBpcm8udGVzdChDb3JhbC5UUDMkQ2hsX3VnLmNtMikNCiNOb3Qgbm9ybWFsDQoNCmhpc3QobG9nKENvcmFsLlRQMyRDaGxfdWcuY20yKzEpKQ0Kc2hhcGlyby50ZXN0KGxvZyhDb3JhbC5UUDMkQ2hsX3VnLmNtMisxKSkNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkNobC5sbWVfVFAzPC1sbWVyKGxvZyhDaGxfdWcuY20yKzEpfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDMpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpDaGwubG1lX3Jlc19UUDMgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBDaGwubG1lX1RQMywgcGxvdCA9IEYpDQpwbG90KENobC5sbWVfcmVzX1RQMykNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KENobC5sbWVfVFAzKQ0KDQpldGFfc3F1YXJlZChDaGwubG1lX1RQMykNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkNobF9UUDMucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQ2hsLmxtZV9UUDMpJGNvZWZmaWNpZW50c1stMSxdKQ0KQ2hsX1RQMy5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkNobF9UUDMucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKENobC5sbWVfVFAzKSRFdGEyKQ0KQ2hsX1RQMy5yZXMkUmVzcG9uc2U8LXJlcCgiQ2hsb3JvcGh5bGwiLCBucm93KENobF9UUDMucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KQ2hsLmxtZV9UUDNfS0w8LWxtZXIobG9nKENobF91Zy5jbTIrMSl+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KENobC5sbWVfVFAzX0tMKQ0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDNfS0wpDQoNCg0KIyNTUw0KQ2hsLmxtZV9UUDNfU1M8LWxtZXIobG9nKENobF91Zy5jbTIrMSl+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDNbd2hpY2goQ29yYWwuVFAzJFNpdGU9PSJTUyIpLF0pDQpzdW1tYXJ5KENobC5sbWVfVFAzX1NTKQ0KZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDNfU1MpDQoNCiMjU2F2ZSByZXN1bHRzDQpDaGxfVFAzLnNpdGUucmVzPC1kYXRhLmZyYW1lKHJiaW5kKHN1bW1hcnkoQ2hsLmxtZV9UUDNfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQ2hsLmxtZV9UUDNfU1MpJGNvZWZmaWNpZW50c1stMSxdKSkNCkNobF9UUDMuc2l0ZS5yZXMkUHJlZGljdG9yPC1jKCJLTCBPcmlnaW4iLCAiU1MgT3JpZ2luIikNCkNobF9UUDMuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDNfS0wpJEV0YTIsIGV0YV9zcXVhcmVkKENobC5sbWVfVFAzX1NTKSRFdGEyKQ0KQ2hsX1RQMy5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJDaGxvcm9waHlsbCIsIG5yb3coQ2hsX1RQMy5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KQ2hsX1RQMy5yZXM8LXJiaW5kKENobF9UUDMucmVzLCBDaGxfVFAzLnNpdGUucmVzKQ0KDQpgYGANCg0KDQpgYGB7ciBQbG90IENobG9yb3BoeWxsIFRQM30NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFAzX0NobC5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDMsIG1lYXN1cmV2YXI9IkNobF91Zy5jbTIiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIENobG9yb3BoeWxsIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDNfQ2hsLnBsb3Q8LWdncGxvdChUUDNfQ2hsLnN1bSwgYWVzKHg9U2l0ZSwgeT1DaGxfdWcuY20yLCBjb2xvdXI9U2l0ZS5PcmlnKSkgKyANCiAgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9T3JpZy5jb2xvcnMubykrDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49Q2hsX3VnLmNtMi1zZSwgeW1heD1DaGxfdWcuY20yK3NlKSwgd2lkdGg9Y2FwLnN6LCBsaW5ld2lkdGg9YmFyLnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSArDQogIGdlb21fcG9pbnQoc2l6ZT1wb2ludC5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkrDQogIHRoZW1lX2NsYXNzaWMoKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJ0b3AiKSsNCiAgbGFicyh4PSJTaXRlIGFuZCBPcmlnaW4iLCB5PWV4cHJlc3Npb24ocGFzdGUoJ1RvdGFsIENobG9yb3BoeWxsIChcdTAzQkNnIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDAuNSwgMy4yNSkrDQogIGFubm90YXRlKCJ0ZXh0IiwgeD0xLCB5PTEuNSwgbGFiZWw9Ii0iLCBzaXplPWxldmVscy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgVFAzX0NobC5wbG90DQpgYGANCg0KDQojIyMjIFNhdmUgUmVzdWx0cw0KYGBge3J9DQojI0NvbWJpbmUgUmVzdWx0cw0KUGh5c19UMy5yZXM8LXJiaW5kKFByb3QuQ19UUDMucmVzLCBQcm90LlNfVFAzLnJlcywgQmlvLkNfVFAzLnJlcywgQmlvLlNfVFAzLnJlcywgQ2hsX1RQMy5yZXMpDQoNCiMjQWRkIFRpbWVwb2ludA0KUGh5c19UMy5yZXMkVGltZVA8LXJlcCgiVFAzIiwgbnJvdyhQaHlzX1QzLnJlcykpDQoNCmBgYA0KDQoNCiMjIyBUUDQNCg0KYGBge3J9DQojI1N1YnNldCBUaW1lcG9pbnQgNCANCkNvcmFsLlRQNDwtc3Vic2V0KENvcmFsLnJtLCBUaW1lUD09IlRQNCIpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBIb3N0IA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDQkVFBfdWcuY20yX0MpDQpzaGFwaXJvLnRlc3QoQ29yYWwuVFA0JFRQX3VnLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuQy5sbWVfVFA0PC1sbWVyKFRQX3VnLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDQpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LkMubG1lX3Jlc19UUDQgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LkMubG1lX1RQNCwgcGxvdCA9IEYpDQpwbG90KFByb3QuQy5sbWVfcmVzX1RQNCkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuQy5sbWVfVFA0KQ0KDQpldGFfc3F1YXJlZChQcm90LkMubG1lX1RQNCkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuQ19UUDQucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5DLmxtZV9UUDQpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5DX1RQNC5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuQ19UUDQucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuQy5sbWVfVFA0KSRFdGEyKQ0KUHJvdC5DX1RQNC5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBIb3N0IiwgbnJvdyhQcm90LkNfVFA0LnJlcykpDQoNCmBgYA0KDQoNCiMjIyMgUHJvdGVpbiBTeW1iaW9udCANCmBgYHtyfQ0KIyNDaGVjayBub3JtYWxpdHkNCmhpc3QoQ29yYWwuVFA0JFRQX3VnLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQNCRUUF91Zy5jbTJfUykNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNClByb3QuUy5sbWVfVFA0PC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDQpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpQcm90LlMubG1lX3Jlc19UUDQgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBQcm90LlMubG1lX1RQNCwgcGxvdCA9IEYpDQpwbG90KFByb3QuUy5sbWVfcmVzX1RQNCkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFA0KQ0KDQpldGFfc3F1YXJlZChQcm90LlMubG1lX1RQNCkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNClByb3QuU19UUDQucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoUHJvdC5TLmxtZV9UUDQpJGNvZWZmaWNpZW50c1stMSxdKQ0KUHJvdC5TX1RQNC5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNClByb3QuU19UUDQucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFA0KSRFdGEyKQ0KUHJvdC5TX1RQNC5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQNC5yZXMpKQ0KDQpgYGANCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KUHJvdC5TLmxtZV9UUDRfS0w8LWxtZXIoVFBfdWcuY20yX1N+T3JpZ2luKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDRbd2hpY2goQ29yYWwuVFA0JFNpdGU9PSJLTCIpLF0pDQpzdW1tYXJ5KFByb3QuUy5sbWVfVFA0X0tMKQ0KZXRhX3NxdWFyZWQoUHJvdC5TLmxtZV9UUDRfS0wpDQoNCiMjU1MNClByb3QuUy5sbWVfVFA0X1NTPC1sbWVyKFRQX3VnLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0W3doaWNoKENvcmFsLlRQNCRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShQcm90LlMubG1lX1RQNF9TUykNCmV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFA0X1NTKQ0KDQojI1NhdmUgcmVzdWx0cw0KUHJvdC5TX1RQNC5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KFByb3QuUy5sbWVfVFA0X0tMKSRjb2VmZmljaWVudHNbLTEsXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5KFByb3QuUy5sbWVfVFA0X1NTKSRjb2VmZmljaWVudHNbLTEsXSkpDQpQcm90LlNfVFA0LnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpQcm90LlNfVFA0LnNpdGUucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKFByb3QuUy5sbWVfVFA0X0tMKSRFdGEyLCBldGFfc3F1YXJlZChQcm90LlMubG1lX1RQNF9TUykkRXRhMikNClByb3QuU19UUDQuc2l0ZS5yZXMkUmVzcG9uc2U8LXJlcCgiUHJvdGVpbiBTeW1iaW9udCIsIG5yb3coUHJvdC5TX1RQNC5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KUHJvdC5TX1RQNC5yZXM8LXJiaW5kKFByb3QuU19UUDQucmVzLCBQcm90LlNfVFA0LnNpdGUucmVzKQ0KDQpgYGANCg0KDQoNCmBgYHtyIFBsb3QgUHJvdGVpbiBTeW1iaW9udCBUUDR9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQNF9Qcm90U3ltLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQNCwgbWVhc3VyZXZhcj0iVFBfdWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IFByb3RlaW4gYWNyb3NzIFRyZWF0bWVudHMNClRQNF9Qcm90U3ltLnBsb3Q8LWdncGxvdChUUDRfUHJvdFN5bS5zdW0sIGFlcyh4PVNpdGUsIHk9VFBfdWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1UUF91Zy5jbTJfUy1zZSwgeW1heD1UUF91Zy5jbTJfUytzZSksIHdpZHRoPWNhcC5zeiwgbGluZXdpZHRoPWJhci5zeiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2Uod2lkdGg9MC41KSkgKw0KICBnZW9tX3BvaW50KHNpemU9cG9pbnQuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0idG9wIikrDQogIGxhYnMoeD0iU2l0ZSBhbmQgT3JpZ2luIiwgeT1leHByZXNzaW9uKHBhc3RlKCdTeW1iaW9udCBQcm90ZWluIChcdTAzQkNnIGNtJ14tMioiKSIpKSwgY29sb3VyPU5VTEwpKw0KICB5bGltKDI1MCwgNTUwKTsgVFA0X1Byb3RTeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBCaW9tYXNzIEhvc3QgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQNCRBRkRXX21nLmNtMl9DKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQNCRBRkRXX21nLmNtMl9DKQ0KI05vcm1hbA0KDQojI01vZGVsDQojRnVuY3Rpb24gb2YgU2l0ZSBhbmQgT3JpZ2luLCB3aXRoIEdlbm90eXBlIGFzIGEgUmFuZG9tIGVmZmVjdA0KI0ludGVyYWN0aW9ucyBiZXR3ZWVuIE9yaWdpbiBhbmQgU2l0ZQ0KQmlvLkMubG1lX1RQNDwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDQpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpCaW8uQy5sbWVfcmVzX1RQNCA8LSBzaW11bGF0ZVJlc2lkdWFscyhmaXR0ZWRNb2RlbCA9IEJpby5DLmxtZV9UUDQsIHBsb3QgPSBGKQ0KcGxvdChCaW8uQy5sbWVfcmVzX1RQNCkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KEJpby5DLmxtZV9UUDQpDQoNCmV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDQpDQoNCiMjU2F2ZSBtb2RlbCByZXN1bHRzDQpCaW8uQ19UUDQucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQmlvLkMubG1lX1RQNCkkY29lZmZpY2llbnRzWy0xLF0pDQpCaW8uQ19UUDQucmVzJFByZWRpY3RvcjwtYygiT3JpZ2luIiwgIlNpdGUiLCAiT3JpZ2luIHggU2l0ZSIpDQpCaW8uQ19UUDQucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKEJpby5DLmxtZV9UUDQpJEV0YTIpDQpCaW8uQ19UUDQucmVzJFJlc3BvbnNlPC1yZXAoIkJpb21hc3MgSG9zdCIsIG5yb3coQmlvLkNfVFA0LnJlcykpDQoNCmBgYA0KDQoNCkVmZmVjdCBzaXplIG9mIE9yaWdpbiBmb3IgZWFjaCBTaXRlDQpgYGB7cn0NCg0KIyNLTA0KQmlvLkMubG1lX1RQNF9LTDwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0W3doaWNoKENvcmFsLlRQNCRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShCaW8uQy5sbWVfVFA0X0tMKQ0KZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQNF9LTCkNCg0KIyNTUw0KQmlvLkMubG1lX1RQNF9TUzwtbG1lcihBRkRXX21nLmNtMl9Dfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0W3doaWNoKENvcmFsLlRQNCRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShCaW8uQy5sbWVfVFA0X1NTKQ0KZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQNF9TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkJpby5DX1RQNC5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KEJpby5DLmxtZV9UUDRfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQmlvLkMubG1lX1RQNF9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQmlvLkNfVFA0LnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpCaW8uQ19UUDQuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQNF9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQmlvLkMubG1lX1RQNF9TUykkRXRhMikNCkJpby5DX1RQNC5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIEhvc3QiLCBucm93KEJpby5DX1RQNC5zaXRlLnJlcykpDQoNCiMjQ29tYmluZSByZXN1bHRzIA0KQmlvLkNfVFA0LnJlczwtcmJpbmQoQmlvLkNfVFA0LnJlcywgQmlvLkNfVFA0LnNpdGUucmVzKQ0KDQpgYGANCg0KDQpgYGB7ciBQbG90IEJpb21hc3MgSG9zdCBUUDR9DQojI1N1bW1hcnkgc3RhdGlzdGljcyBieSBTaXRlIGFuZCBPcmlnaW4NClRQNF9CaW9Ib3N0LnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQNCwgbWVhc3VyZXZhcj0iQUZEV19tZy5jbTJfQyIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgSG9zdCBCaW9tYXNzIGFjcm9zcyBUcmVhdG1lbnRzDQpUUDRfQmlvSG9zdC5wbG90PC1nZ3Bsb3QoVFA0X0Jpb0hvc3Quc3VtLCBhZXMoeD1TaXRlLCB5PUFGRFdfbWcuY20yX0MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BRkRXX21nLmNtMl9DLXNlLCB5bWF4PUFGRFdfbWcuY20yX0Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnSG9zdCBCaW9tYXNzIChtZyBjbSdeLTIqIikiKSksIGNvbG91cj1OVUxMKSsNCiAgeWxpbSgwLjgsIDEuNikrDQogIGFubm90YXRlKCJ0ZXh0IiwgeD0yLCB5PTEuNDUsIGxhYmVsPSIqIiwgc2l6ZT1zaWcuc3osIGZvbnRmYWNlPSJib2xkIik7IFRQNF9CaW9Ib3N0LnBsb3QNCmBgYA0KDQoNCiMjIyMgQmlvbWFzcyBTeW1iaW9udHMgDQpgYGB7cn0NCiMjQ2hlY2sgbm9ybWFsaXR5DQpoaXN0KENvcmFsLlRQNCRBRkRXX21nLmNtMl9TKQ0Kc2hhcGlyby50ZXN0KENvcmFsLlRQNCRBRkRXX21nLmNtMl9TKQ0KI05vcm1hbA0KDQojI01vZGVsIA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkJpby5TLmxtZV9UUDQ8LWxtZXIoQUZEV19tZy5jbTJfU35PcmlnaW4qU2l0ZSsoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0KQ0KDQojI0NoZWNrIHJlc2lkdWFscw0KQmlvLlMubG1lX3Jlc19UUDQgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBCaW8uUy5sbWVfVFA0LCBwbG90ID0gRikNCnBsb3QoQmlvLlMubG1lX3Jlc19UUDQpDQoNCiMjTW9kZWwgcmVzdWx0cw0Kc3VtbWFyeShCaW8uUy5sbWVfVFA0KQ0KDQpldGFfc3F1YXJlZChCaW8uUy5sbWVfVFA0KQ0KDQojI1NhdmUgbW9kZWwgcmVzdWx0cw0KQmlvLlNfVFA0LnJlczwtZGF0YS5mcmFtZShzdW1tYXJ5KEJpby5TLmxtZV9UUDQpJGNvZWZmaWNpZW50c1stMSxdKQ0KQmlvLlNfVFA0LnJlcyRQcmVkaWN0b3I8LWMoIk9yaWdpbiIsICJTaXRlIiwgIk9yaWdpbiB4IFNpdGUiKQ0KQmlvLlNfVFA0LnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChCaW8uUy5sbWVfVFA0KSRFdGEyKQ0KQmlvLlNfVFA0LnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIFN5bWJpb250IiwgbnJvdyhCaW8uU19UUDQucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KIyNLTA0KQmlvLlMubG1lX1RQNF9LTDwtbG1lcihBRkRXX21nLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0W3doaWNoKENvcmFsLlRQNCRTaXRlPT0iS0wiKSxdKQ0Kc3VtbWFyeShCaW8uUy5sbWVfVFA0X0tMKQ0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQNF9LTCkNCg0KIyNTUw0KQmlvLlMubG1lX1RQNF9TUzwtbG1lcihBRkRXX21nLmNtMl9Tfk9yaWdpbisoMXxHZW5vdHlwZSksIGRhdGE9Q29yYWwuVFA0W3doaWNoKENvcmFsLlRQNCRTaXRlPT0iU1MiKSxdKQ0Kc3VtbWFyeShCaW8uUy5sbWVfVFA0X1NTKQ0KZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQNF9TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkJpby5TX1RQNC5zaXRlLnJlczwtZGF0YS5mcmFtZShyYmluZChzdW1tYXJ5KEJpby5TLmxtZV9UUDRfS0wpJGNvZWZmaWNpZW50c1stMSxdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkoQmlvLlMubG1lX1RQNF9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQmlvLlNfVFA0LnNpdGUucmVzJFByZWRpY3RvcjwtYygiS0wgT3JpZ2luIiwgIlNTIE9yaWdpbiIpDQpCaW8uU19UUDQuc2l0ZS5yZXMkRXRhU3E8LWMoZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQNF9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQmlvLlMubG1lX1RQNF9TUykkRXRhMikNCkJpby5TX1RQNC5zaXRlLnJlcyRSZXNwb25zZTwtcmVwKCJCaW9tYXNzIFN5bWJpb250IiwgbnJvdyhCaW8uU19UUDQuc2l0ZS5yZXMpKQ0KDQojI0NvbWJpbmUgcmVzdWx0cyANCkJpby5TX1RQNC5yZXM8LXJiaW5kKEJpby5TX1RQNC5yZXMsIEJpby5TX1RQNC5zaXRlLnJlcykNCg0KYGBgDQoNCg0KYGBge3IgUGxvdCBCaW9tYXNzIFN5bWJpb250IFRQNH0NCiMjU3VtbWFyeSBzdGF0aXN0aWNzIGJ5IFNpdGUgYW5kIE9yaWdpbg0KVFA0X0Jpb1N5bS5zdW08LXN1bW1hcnlTRShDb3JhbC5UUDQsIG1lYXN1cmV2YXI9IkFGRFdfbWcuY20yX1MiLCBncm91cHZhcnM9YygiU2l0ZSIsICJPcmlnaW4iLCAiU2l0ZS5PcmlnIiksIG5hLnJtPVRSVUUpDQoNCiMjUGxvdCBBdmVyYWdlIFN5bWJpb250IEJpb21hc3MgYWNyb3NzIFRyZWF0bWVudHMNClRQNF9CaW9TeW0ucGxvdDwtZ2dwbG90KFRQNF9CaW9TeW0uc3VtLCBhZXMoeD1TaXRlLCB5PUFGRFdfbWcuY20yX1MsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1BRkRXX21nLmNtMl9TLXNlLCB5bWF4PUFGRFdfbWcuY20yX1Mrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnU3ltYmlvbnQgQmlvbWFzcyAobWcgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC40NSwgMC45NSk7IFRQNF9CaW9TeW0ucGxvdA0KYGBgDQoNCg0KIyMjIyBDaGxvcm9waHlsbA0KYGBge3J9DQojI0NoZWNrIG5vcm1hbGl0eQ0KaGlzdChDb3JhbC5UUDQkQ2hsX3VnLmNtMikNCnNoYXBpcm8udGVzdChDb3JhbC5UUDQkQ2hsX3VnLmNtMikNCiNTbGlnaHRseSBub24gbm9ybWFsDQoNCmhpc3QobG9nKENvcmFsLlRQNCRDaGxfdWcuY20yKzEpKQ0Kc2hhcGlyby50ZXN0KGxvZyhDb3JhbC5UUDQkQ2hsX3VnLmNtMisxKSkNCiNOb3JtYWwNCg0KIyNNb2RlbA0KI0Z1bmN0aW9uIG9mIFNpdGUgYW5kIE9yaWdpbiwgd2l0aCBHZW5vdHlwZSBhcyBhIFJhbmRvbSBlZmZlY3QNCiNJbnRlcmFjdGlvbnMgYmV0d2VlbiBPcmlnaW4gYW5kIFNpdGUNCkNobC5sbWVfVFA0PC1sbWVyKGxvZyhDaGxfdWcuY20yKzEpfk9yaWdpbipTaXRlKygxfEdlbm90eXBlKSwgZGF0YT1Db3JhbC5UUDQpDQoNCiMjQ2hlY2sgcmVzaWR1YWxzDQpDaGwubG1lX3Jlc19UUDQgPC0gc2ltdWxhdGVSZXNpZHVhbHMoZml0dGVkTW9kZWwgPSBDaGwubG1lX1RQNCwgcGxvdCA9IEYpDQpwbG90KENobC5sbWVfcmVzX1RQNCkNCg0KIyNNb2RlbCByZXN1bHRzDQpzdW1tYXJ5KENobC5sbWVfVFA0KQ0KDQpldGFfc3F1YXJlZChDaGwubG1lX1RQNCkNCg0KIyNTYXZlIG1vZGVsIHJlc3VsdHMNCkNobF9UUDQucmVzPC1kYXRhLmZyYW1lKHN1bW1hcnkoQ2hsLmxtZV9UUDQpJGNvZWZmaWNpZW50c1stMSxdKQ0KQ2hsX1RQNC5yZXMkUHJlZGljdG9yPC1jKCJPcmlnaW4iLCAiU2l0ZSIsICJPcmlnaW4geCBTaXRlIikNCkNobF9UUDQucmVzJEV0YVNxPC1jKGV0YV9zcXVhcmVkKENobC5sbWVfVFA0KSRFdGEyKQ0KQ2hsX1RQNC5yZXMkUmVzcG9uc2U8LXJlcCgiQ2hsb3JvcGh5bGwiLCBucm93KENobF9UUDQucmVzKSkNCg0KYGBgDQoNCg0KRWZmZWN0IHNpemUgb2YgT3JpZ2luIGZvciBlYWNoIFNpdGUNCmBgYHtyfQ0KDQojI0tMDQpDaGwubG1lX1RQNF9LTDwtbG1lcihsb2coQ2hsX3VnLmNtMisxKX5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IktMIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDRfS0wpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQNF9LTCkNCg0KDQojI1NTDQpDaGwubG1lX1RQNF9TUzwtbG1lcihsb2coQ2hsX3VnLmNtMisxKX5PcmlnaW4rKDF8R2Vub3R5cGUpLCBkYXRhPUNvcmFsLlRQNFt3aGljaChDb3JhbC5UUDQkU2l0ZT09IlNTIiksXSkNCnN1bW1hcnkoQ2hsLmxtZV9UUDRfU1MpDQpldGFfc3F1YXJlZChDaGwubG1lX1RQNF9TUykNCg0KIyNTYXZlIHJlc3VsdHMNCkNobF9UUDQuc2l0ZS5yZXM8LWRhdGEuZnJhbWUocmJpbmQoc3VtbWFyeShDaGwubG1lX1RQNF9LTCkkY29lZmZpY2llbnRzWy0xLF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeShDaGwubG1lX1RQNF9TUykkY29lZmZpY2llbnRzWy0xLF0pKQ0KQ2hsX1RQNC5zaXRlLnJlcyRQcmVkaWN0b3I8LWMoIktMIE9yaWdpbiIsICJTUyBPcmlnaW4iKQ0KQ2hsX1RQNC5zaXRlLnJlcyRFdGFTcTwtYyhldGFfc3F1YXJlZChDaGwubG1lX1RQNF9LTCkkRXRhMiwgZXRhX3NxdWFyZWQoQ2hsLmxtZV9UUDRfU1MpJEV0YTIpDQpDaGxfVFA0LnNpdGUucmVzJFJlc3BvbnNlPC1yZXAoIkNobG9yb3BoeWxsIiwgbnJvdyhDaGxfVFA0LnNpdGUucmVzKSkNCg0KIyNDb21iaW5lIHJlc3VsdHMgDQpDaGxfVFA0LnJlczwtcmJpbmQoQ2hsX1RQNC5yZXMsIENobF9UUDQuc2l0ZS5yZXMpDQoNCmBgYA0KDQoNCmBgYHtyIFBsb3QgQ2hsb3JvcGh5bGwgVFA0fQ0KIyNTdW1tYXJ5IHN0YXRpc3RpY3MgYnkgU2l0ZSBhbmQgT3JpZ2luDQpUUDRfQ2hsLnN1bTwtc3VtbWFyeVNFKENvcmFsLlRQNCwgbWVhc3VyZXZhcj0iQ2hsX3VnLmNtMiIsIGdyb3VwdmFycz1jKCJTaXRlIiwgIk9yaWdpbiIsICJTaXRlLk9yaWciKSwgbmEucm09VFJVRSkNCg0KIyNQbG90IEF2ZXJhZ2UgQ2hsb3JvcGh5bGwgYWNyb3NzIFRyZWF0bWVudHMNClRQNF9DaGwucGxvdDwtZ2dwbG90KFRQNF9DaGwuc3VtLCBhZXMoeD1TaXRlLCB5PUNobF91Zy5jbTIsIGNvbG91cj1TaXRlLk9yaWcpKSArIA0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1PcmlnLmNvbG9ycy5vKSsNCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1DaGxfdWcuY20yLXNlLCB5bWF4PUNobF91Zy5jbTIrc2UpLCB3aWR0aD1jYXAuc3osIGxpbmV3aWR0aD1iYXIuc3osIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKHdpZHRoPTAuNSkpICsNCiAgZ2VvbV9wb2ludChzaXplPXBvaW50LnN6LCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSh3aWR0aD0wLjUpKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249InRvcCIpKw0KICBsYWJzKHg9IlNpdGUgYW5kIE9yaWdpbiIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgnVG90YWwgQ2hsb3JvcGh5bGwgKFx1MDNCQ2cgY20nXi0yKiIpIikpLCBjb2xvdXI9TlVMTCkrDQogIHlsaW0oMC41LCAzLjI1KTsgVFA0X0NobC5wbG90DQpgYGANCg0KDQojIyMjIFNhdmUgUmVzdWx0cw0KYGBge3J9DQojI0NvbWJpbmUgUmVzdWx0cw0KUGh5c19UNC5yZXM8LXJiaW5kKFByb3QuQ19UUDQucmVzLCBQcm90LlNfVFA0LnJlcywgQmlvLkNfVFA0LnJlcywgQmlvLlNfVFA0LnJlcywgQ2hsX1RQNC5yZXMpDQoNCiMjQWRkIFRpbWVwb2ludA0KUGh5c19UNC5yZXMkVGltZVA8LXJlcCgiVFA0IiwgbnJvdyhQaHlzX1Q0LnJlcykpDQoNCmBgYA0KDQoNCiMjIyBFZmZlY3QgU2l6ZSBvdmVyIFRpbWUNCmBgYHtyfQ0KIyNEYXRhZnJhbWUgb2YgZWZmZWN0IHNpemUgcmVzdWx0cw0KUGh5cy5FUzwtcmJpbmQoUGh5c19UMS5yZXMsIFBoeXNfVDIucmVzLCBQaHlzX1QzLnJlcywgUGh5c19UNC5yZXMpDQpQaHlzLkVTPC1QaHlzLkVTICU+JSBkcGx5cjo6cmVuYW1lKHAgPSBQci4uLnQuLikNClBoeXMuRVM8LVBoeXMuRVNbLGMoIlRpbWVQIiwgIlByZWRpY3RvciIsICJSZXNwb25zZSIsICJFdGFTcSIsICJwIildDQoNCiMjU2l0ZSBzcGVjaWZpYyByZXN1bHRzDQpQaHlzLkVTPC1QaHlzLkVTW3doaWNoKFBoeXMuRVMkUHJlZGljdG9yPT0iS0wgT3JpZ2luIiB8IFBoeXMuRVMkUHJlZGljdG9yPT0iU1MgT3JpZ2luIiksXQ0KUGh5cy5FUzwtUGh5cy5FUyAlPiUgc2VwYXJhdGVfd2lkZXJfZGVsaW0oY29scz0iUHJlZGljdG9yIiwgZGVsaW09IiAiLCBuYW1lcz1jKCJTaXRlIiwgIlByZWRpY3RvciIpLCBjb2xzX3JlbW92ZSA9IFRSVUUpDQoNCiMjQWRkIE1ldHJpYyBuYW1lcw0KUGh5cy5FUyRNZXRyaWM8LWlmZWxzZShQaHlzLkVTJFJlc3BvbnNlPT0gIlByb3RlaW4gSG9zdCIsICJUUF91Zy5jbTJfQyIsIGlmZWxzZSgNCiAgUGh5cy5FUyRSZXNwb25zZT09ICJQcm90ZWluIFN5bWJpb250IiwgIlRQX3VnLmNtMl9TIiwgaWZlbHNlKA0KICAgIFBoeXMuRVMkUmVzcG9uc2U9PSJCaW9tYXNzIEhvc3QiLCAiQUZEV19tZy5jbTJfQyIsIGlmZWxzZSgNCiAgICAgIFBoeXMuRVMkUmVzcG9uc2U9PSJCaW9tYXNzIFN5bWJpb250IiwgIkFGRFdfbWcuY20yX1MiLCBpZmVsc2UoDQogICAgICAgIFBoeXMuRVMkUmVzcG9uc2U9PSJDaGxvcm9waHlsbCIsICJDaGxfdWcuY20yIiwgTkEpKSkpKQ0KDQojI0FkZCBTaWduaWZpY2FuY2UgbGV2ZWxzDQpQaHlzLkVTJFNpZzwtaWZlbHNlKFBoeXMuRVMkcDwwLjAwMSwgIioqKiIsIGlmZWxzZShQaHlzLkVTJHA8MC4wMSwgIioqIiwgDQogICAgICAgICAgICBpZmVsc2UoUGh5cy5FUyRwPDAuMDUsICIqIiwgaWZlbHNlKFBoeXMuRVMkcDwwLjEsICItIiwgTkEpKSkpDQoNCmBgYA0KDQoNCiMjIyMgSG9zdCBCaW9tYXNzDQpgYGB7ciBQbG90IEVmZmVjdCBTaXplIEhvc3QgQmlvbWFzc30NCkJpby5DLkVTLnBsb3Q8LWdncGxvdChQaHlzLkVTW3doaWNoKFBoeXMuRVMkTWV0cmljPT0iQUZEV19tZy5jbTJfQyIpLF0sIGFlcyh4PVRpbWVQLCB5PUV0YVNxLCBmaWxsPVNpdGUpKSsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9U2l0ZS5jb2xvcnMubykrDQp0aGVtZV9jbGFzc2ljKCkrDQogIGdndGl0bGUoIkhvc3QgQmlvbWFzcyIpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPXBhbmVsLmxhYi5zeiwgaGp1c3Q9MC41KSwgDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoLjksIC44KSkrDQogICBsYWJzKHg9IlRpbWUgUG9pbnQiLCB5PWV4cHJlc3Npb24ocGFzdGUoIk9yaWdpbiBFZmZlY3QgU2l6ZSAocCIsIGV0YV4yLCAiKSIpKSwgY29sb3VyPSJTaXRlIikrDQogIHlsaW0oMCwgMC42KSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1TaWcpLCB2anVzdD0tMC4wMiwgY29sb3I9ImJsYWNrIiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC45KSwgc2l6ZT1sZXZlbHMuc3osIGZvbnRmYWNlPSJib2xkIik7IEJpby5DLkVTLnBsb3QNCg0KYGBgDQoNCiMjIyMgU3ltYmlvbnQgQmlvbWFzcw0KYGBge3IgUGxvdCBFZmZlY3QgU2l6ZSBTeW1iaW9udCBCaW9tYXNzfQ0KQmlvLlMuRVMucGxvdDwtZ2dwbG90KFBoeXMuRVNbd2hpY2goUGh5cy5FUyRNZXRyaWM9PSJBRkRXX21nLmNtMl9TIiksXSwgYWVzKHg9VGltZVAsIHk9RXRhU3EsIGZpbGw9U2l0ZSkpKw0KICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKw0KICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1TaXRlLmNvbG9ycy5vKSsNCnRoZW1lX2NsYXNzaWMoKSsNCiAgZ2d0aXRsZSgiU3ltYmlvbnQgQmlvbWFzcyIpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPXBhbmVsLmxhYi5zeiwgaGp1c3Q9MC41KSwgDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0Lnk9ZWxlbWVudF90ZXh0KHNpemU9YXhpcy50eHQuc3osIGNvbG91cj0iYmxhY2siKSwNCiAgICAgICAgbGVnZW5kLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnR4dC5zeiksIA0KICAgICAgICBsZWdlbmQudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9bGVnLnRpdGxlLnN6KSwgDQogICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvciA9ICJibGFjayIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoLjksIC44KSkrDQogICBsYWJzKHg9IlRpbWUgUG9pbnQiLCB5PWV4cHJlc3Npb24ocGFzdGUoIk9yaWdpbiBFZmZlY3QgU2l6ZSAocCIsIGV0YV4yLCAiKSIpKSwgY29sb3VyPSJTaXRlIikrDQogIHlsaW0oMCwgMC42KSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1TaWcpLCB2anVzdD0tMC4wMiwgY29sb3I9ImJsYWNrIiwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoMC45KSwgc2l6ZT1sZXZlbHMuc3osIGZvbnRmYWNlPSJib2xkIik7IEJpby5TLkVTLnBsb3QNCg0KYGBgDQoNCg0KIyMjIyBTeW1iaW9udCBQcm90ZWluDQpgYGB7ciBQbG90IEVmZmVjdCBTaXplIFN5bWJpb250IFByb3RlaW59DQpQcm90LlMuRVMucGxvdDwtZ2dwbG90KFBoeXMuRVNbd2hpY2goUGh5cy5FUyRNZXRyaWM9PSJUUF91Zy5jbTJfUyIpLF0sIGFlcyh4PVRpbWVQLCB5PUV0YVNxLCBmaWxsPVNpdGUpKSsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9U2l0ZS5jb2xvcnMubykrDQp0aGVtZV9jbGFzc2ljKCkrDQogIGdndGl0bGUoIlN5bWJpb250IFByb3RlaW4iKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT1wYW5lbC5sYWIuc3osIGhqdXN0PTAuNSksIA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IGF4aXMudGl0bGUuc3opLCANCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGF4aXMudGV4dC55PWVsZW1lbnRfdGV4dChzaXplPWF4aXMudHh0LnN6LCBjb2xvdXI9ImJsYWNrIiksDQogICAgICAgIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPWxlZy50eHQuc3opLCANCiAgICAgICAgbGVnZW5kLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPWxlZy50aXRsZS5zeiksIA0KICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSAiYmxhY2siKSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKC45LCAuOCkpKw0KICAgbGFicyh4PSJUaW1lIFBvaW50IiwgeT1leHByZXNzaW9uKHBhc3RlKCJPcmlnaW4gRWZmZWN0IFNpemUgKHAiLCBldGFeMiwgIikiKSksIGNvbG91cj0iU2l0ZSIpKw0KICB5bGltKDAsIDAuNikrDQogIGdlb21fdGV4dChhZXMobGFiZWw9U2lnKSwgdmp1c3Q9LTAuMDIsIGNvbG9yPSJibGFjayIsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKDAuOSksIHNpemU9bGV2ZWxzLnN6LCBmb250ZmFjZT0iYm9sZCIpOyBQcm90LlMuRVMucGxvdA0KDQpgYGANCg0KDQojIyMjIENobG9yb3BoeWxsDQpgYGB7ciBQbG90IEVmZmVjdCBTaXplIENobG9yb3BoeWxsfQ0KQ2hsLkVTLnBsb3Q8LWdncGxvdChQaHlzLkVTW3doaWNoKFBoeXMuRVMkTWV0cmljPT0iQ2hsX3VnLmNtMiIpLF0sIGFlcyh4PVRpbWVQLCB5PUV0YVNxLCBmaWxsPVNpdGUpKSsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9U2l0ZS5jb2xvcnMubykrDQp0aGVtZV9jbGFzc2ljKCkrDQogIGdndGl0bGUoIkNobG9yb3BoeWxsIikrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9cGFuZWwubGFiLnN6LCBoanVzdD0wLjUpLCANCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSBheGlzLnRpdGxlLnN6KSwgDQogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gYXhpcy50aXRsZS5zeiksIA0KICAgICAgICBheGlzLnRleHQueD1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBheGlzLnRleHQueT1lbGVtZW50X3RleHQoc2l6ZT1heGlzLnR4dC5zeiwgY29sb3VyPSJibGFjayIpLA0KICAgICAgICBsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT1sZWcudHh0LnN6KSwgDQogICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT1sZWcudGl0bGUuc3opLCANCiAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG9yID0gImJsYWNrIiksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249YyguOSwgLjgpKSsNCiAgIGxhYnMoeD0iVGltZSBQb2ludCIsIHk9ZXhwcmVzc2lvbihwYXN0ZSgiT3JpZ2luIEVmZmVjdCBTaXplIChwIiwgZXRhXjIsICIpIikpLCBjb2xvdXI9IlNpdGUiKSsNCiAgeWxpbSgwLCAwLjYpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsPVNpZyksIHZqdXN0PS0wLjAyLCBjb2xvcj0iYmxhY2siLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgwLjkpLCBzaXplPWxldmVscy5zeiwgZm9udGZhY2U9ImJvbGQiKTsgQ2hsLkVTLnBsb3QNCg0KYGBgDQoNCg0KIyBGaWd1cmVzDQoNCiMjIyBGaWd1cmUgMyBVbml2YXJpYXRlIFBoeXNpb2xvZ3kNCg0KIyMjIyBBZGp1c3QgZm9yIFBhbmVsDQpgYGB7cn0NCiMjQmlvbWFzcyBIb3N0DQpUUDFfQmlvSG9zdC5wbG90PC1UUDFfQmlvSG9zdC5wbG90KyBnZ3RpdGxlKCJUUDEiKSsgbGFicyh4PSIiKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT1wYW5lbC5sYWIuc3osIGZhY2U9ImJvbGQiLCBoanVzdD0wLjUpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC41LCAwLjg1KSwgbGVnZW5kLmRpcmVjdGlvbj0iaG9yaXpvbnRhbCIpKw0KICBndWlkZXMoY29sb3I9Z3VpZGVfbGVnZW5kKG5yb3c9MiwgYnlyb3c9RkFMU0UpKSANCg0KVFAyX0Jpb0hvc3QucGxvdDwtVFAyX0Jpb0hvc3QucGxvdCsgZ2d0aXRsZSgiVFAyIikrIGxhYnMoeD0iIiwgeT0iIikgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPXBhbmVsLmxhYi5zeiwgZmFjZT0iYm9sZCIsIGhqdXN0PTAuNSksIA0KICAgICAgICBsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDNfQmlvSG9zdC5wbG90PC1UUDNfQmlvSG9zdC5wbG90KyBnZ3RpdGxlKCJUUDMiKSsgbGFicyh4PSIiLCB5PSIiKSArDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9cGFuZWwubGFiLnN6LCBmYWNlPSJib2xkIiwgaGp1c3Q9MC41KSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQNF9CaW9Ib3N0LnBsb3Q8LVRQNF9CaW9Ib3N0LnBsb3QrIGdndGl0bGUoIlRQNCIpKyBsYWJzKHg9IiIsIHk9IiIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT1wYW5lbC5sYWIuc3osIGZhY2U9ImJvbGQiLCBoanVzdD0wLjUpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJub25lIikNCg0KQmlvLkMuRVMucGxvdDwtQmlvLkMuRVMucGxvdCArIGxhYnMoeD0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249YyguMTUsIC44KSkNCg0KIyNCaW9tYXNzIFN5bWJpb250DQpUUDFfQmlvU3ltLnBsb3Q8LVRQMV9CaW9TeW0ucGxvdCArIGxhYnMoeD0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDJfQmlvU3ltLnBsb3Q8LVRQMl9CaW9TeW0ucGxvdCArIGxhYnMoeD0iIiwgeT0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDNfQmlvU3ltLnBsb3Q8LVRQM19CaW9TeW0ucGxvdCArIGxhYnMoeD0iIiwgeT0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDRfQmlvU3ltLnBsb3Q8LVRQNF9CaW9TeW0ucGxvdCArIGxhYnMoeD0iIiwgeT0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpCaW8uUy5FUy5wbG90PC1CaW8uUy5FUy5wbG90ICsgbGFicyh4PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpIA0KDQojI1Byb3RlaW4gU3ltYmlvbnQNClRQMV9Qcm90U3ltLnBsb3Q8LVRQMV9Qcm90U3ltLnBsb3QgKyBsYWJzKHg9IiIpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikNCg0KVFAyX1Byb3RTeW0ucGxvdDwtVFAyX1Byb3RTeW0ucGxvdCArIGxhYnMoeD0iIiwgeT0iIikgKyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpUUDNfUHJvdFN5bS5wbG90PC1UUDNfUHJvdFN5bS5wbG90ICsgbGFicyh4PSIiLCB5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQNF9Qcm90U3ltLnBsb3Q8LVRQNF9Qcm90U3ltLnBsb3QgKyBsYWJzKHg9IiIsIHk9IiIpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikNCg0KUHJvdC5TLkVTLnBsb3Q8LVByb3QuUy5FUy5wbG90ICsgbGFicyh4PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpIA0KDQojI0NobG9yb3BoeWxsDQpUUDFfQ2hsLnBsb3Q8LVRQMV9DaGwucGxvdCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQMl9DaGwucGxvdDwtVFAyX0NobC5wbG90ICsgbGFicyh5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQM19DaGwucGxvdDwtVFAzX0NobC5wbG90ICsgbGFicyh5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNClRQNF9DaGwucGxvdDwtVFA0X0NobC5wbG90ICsgbGFicyh5PSIiKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQoNCkNobC5FUy5wbG90PC1DaGwuRVMucGxvdCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpDQpgYGANCg0KDQojIyMjIEZpZ3VyZSAzDQpgYGB7cn0NCiMjQ3JlYXRlIFBhbmVsDQpQaHlzX2ZpZzwtcGxvdF9ncmlkKFRQMV9CaW9Ib3N0LnBsb3QsIFRQMl9CaW9Ib3N0LnBsb3QsIA0KICAgICAgICAgICAgICAgICAgICAgIFRQM19CaW9Ib3N0LnBsb3QsIFRQNF9CaW9Ib3N0LnBsb3QsIEJpby5DLkVTLnBsb3QsIA0KICAgICAgICAgICAgICAgICAgICAgIFRQMV9CaW9TeW0ucGxvdCwgVFAyX0Jpb1N5bS5wbG90LCANCiAgICAgICAgICAgICAgICAgICAgICBUUDNfQmlvU3ltLnBsb3QsIFRQNF9CaW9TeW0ucGxvdCwgQmlvLlMuRVMucGxvdCwgDQogICAgICAgICAgICAgICAgICAgICAgVFAxX1Byb3RTeW0ucGxvdCwgVFAyX1Byb3RTeW0ucGxvdCwgDQogICAgICAgICAgICAgICAgICAgICAgVFAzX1Byb3RTeW0ucGxvdCwgVFA0X1Byb3RTeW0ucGxvdCwgUHJvdC5TLkVTLnBsb3QsIA0KICAgICAgICAgICAgICAgICAgICAgIFRQMV9DaGwucGxvdCwgVFAyX0NobC5wbG90LCANCiAgICAgICAgICAgICAgICAgICAgICBUUDNfQ2hsLnBsb3QsIFRQNF9DaGwucGxvdCwgQ2hsLkVTLnBsb3QsDQogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHM9YygwLjgsIDAuOCwgMC44LCAwLjgsIDEpLCByZWxfaGVpZ2h0cyA9IDEsDQogICAgICAgICAgICAgICAgICAgIG5yb3c9NCwgbmNvbD01LCBieXJvdz1ULCBsYWJlbHMgPSBOVUxMKQ0KDQojI1NhdmUgRmlndXJlDQpnZ3NhdmUoZmlsZW5hbWU9IkZpZ3VyZXMvMDJfUGh5c2lvbG9neS9GaWczX1BoeXNpb2xvZ3kucG5nIiwgcGxvdD1QaHlzX2ZpZywgZHBpPTMwMCwgd2lkdGg9MTYsIGhlaWdodD0xNiwgdW5pdHM9ImluIikNCg0KYGBgDQoNCg0KIyBUYWJsZXMgDQoNCiMjIyBUYWJsZSBTM0EgUGh5c2lvbG9neSBQRVJNQU5PVkEgYW5kIFBFUk1ESVNQDQpgYGB7cn0NCiMjQ29tYmluZSBSZXN1bHRzIFRhYmxlcw0KVGFibGVTM0FfUGh5cy5QRVJNPC1kYXRhLmZyYW1lKHJiaW5kKFBFUk1fVDEucmVzLCBQRVJNX1QyLnJlcywgUEVSTV9UMy5yZXMsIFBFUk1fVDQucmVzKSkNCg0KIyNPcmdhbml6ZQ0KbmFtZXMoVGFibGVTM0FfUGh5cy5QRVJNKQ0KVGFibGVTM0FfUGh5cy5QRVJNPC1UYWJsZVMzQV9QaHlzLlBFUk0gJT4lIGRwbHlyOjpyZW5hbWUoIERGID0gRGYsIFNTID0gU3VtT2ZTcXMsIEVmZmVjdFNpemUgPSBwYXJPbWVnYVNxLCBwID0gUHIuLkYuKQ0KVGFibGVTM0FfUGh5cy5QRVJNPC1UYWJsZVMzQV9QaHlzLlBFUk1bLGMoIlRpbWVwb2ludCIsICJQcmVkaWN0b3IiLCAiREYiLCAiU1MiLCAiRiIsICAgIkVmZmVjdFNpemUiLCAicCIsICJwX0RJU1AiKV0NCg0KI1JvdW5kIHRvIDMgZGlnaXRzDQpUYWJsZVMzQV9QaHlzLlBFUk0kU1M8LXJvdW5kKFRhYmxlUzNBX1BoeXMuUEVSTSRTUywgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRGPC1yb3VuZChUYWJsZVMzQV9QaHlzLlBFUk0kRiwgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRFZmZlY3RTaXplPC1yb3VuZChUYWJsZVMzQV9QaHlzLlBFUk0kRWZmZWN0U2l6ZSwgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRwPC1yb3VuZChUYWJsZVMzQV9QaHlzLlBFUk0kcCwgMykNClRhYmxlUzNBX1BoeXMuUEVSTSRwX0RJU1A8LXJvdW5kKFRhYmxlUzNBX1BoeXMuUEVSTSRwX0RJU1AsIDMpDQoNCiMjV3JpdGUgT3V0IFRhYmxlDQp3cml0ZS5jc3YoVGFibGVTM0FfUGh5cy5QRVJNLCAiVGFibGVzL1RhYmxlUzNBX1BoeXNpb2xvZ3lfUEVSTV9SZXN1bHRzLmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KDQpgYGANCg0KDQojIyMgVGFibGUgUzQgUGh5c2lvbG9neSBVbml2YXJpYXRlIExNDQpgYGB7cn0NCiMjQ29tYmluZSBSZXN1bHRzIFRhYmxlcw0KVGFibGVTNF9QaHlzLkxNPC1kYXRhLmZyYW1lKHJiaW5kKFBoeXNfVDEucmVzLCBQaHlzX1QyLnJlcywgUGh5c19UMy5yZXMsIFBoeXNfVDQucmVzKSkNCg0KIyNPcmdhbml6ZQ0KbmFtZXMoVGFibGVTNF9QaHlzLkxNKQ0KVGFibGVTNF9QaHlzLkxNPC1UYWJsZVM0X1BoeXMuTE0gJT4lIGRwbHlyOjpyZW5hbWUoU0UgPSBTdGQuLkVycm9yLCBERiA9IGRmLCB0ID0gdC52YWx1ZSwgcCA9IFByLi4udC4uLCBFZmZlY3RTaXplID0gRXRhU3EsIFRpbWVwb2ludCA9IFRpbWVQKQ0KVGFibGVTNF9QaHlzLkxNPC1UYWJsZVM0X1BoeXMuTE1bLGMoIlRpbWVwb2ludCIsICJSZXNwb25zZSIsICJQcmVkaWN0b3IiLCAiRXN0aW1hdGUiLCAiU0UiLCAiREYiLCAidCIsICJwIiwgIkVmZmVjdFNpemUiKV0NCg0KI1JvdW5kIHRvIDMgZGlnaXRzDQpUYWJsZVM0X1BoeXMuTE0kRXN0aW1hdGU8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSRFc3RpbWF0ZSwgMykNClRhYmxlUzRfUGh5cy5MTSRTRTwtcm91bmQoVGFibGVTNF9QaHlzLkxNJFNFLCAzKQ0KVGFibGVTNF9QaHlzLkxNJHQ8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSR0LCAzKQ0KVGFibGVTNF9QaHlzLkxNJHA8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSRwLCAzKQ0KVGFibGVTNF9QaHlzLkxNJEVmZmVjdFNpemU8LXJvdW5kKFRhYmxlUzRfUGh5cy5MTSRFZmZlY3RTaXplLCAzKQ0KDQojSW50ZWdlcg0KVGFibGVTNF9QaHlzLkxNJERGPC1yb3VuZChUYWJsZVM0X1BoeXMuTE0kREYsIDApDQoNCiMjV3JpdGUgT3V0IFRhYmxlDQp3cml0ZS5jc3YoVGFibGVTNF9QaHlzLkxNLCAiVGFibGVzL1RhYmxlUzRfUGh5c2lvbG9neV9MTV9SZXN1bHRzLmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KYGBgDQoNCg==